0

我一直在创建一个新线程来更新音频引擎时遇到问题,而主线程在创建新关卡场景的过程中执行分配和 gc。

它在大多数情况下都有效,它解决了关卡转换期间音乐中断的问题,但偶尔或可能在加载一定数量的关卡后它会挂起,我必须从任务管理器关闭游戏,所以不幸的是没有错误消息弹出.

基本上我是这样设置的:

audioThread = new Thread(new ThreadStart(updateAudio));
audioThread.IsBackground = true;
audioThread.Start();

// Allocate new level objects and initialise world

audioThread.Abort();

音频线程方法只是一个无限循环:

private void updateAudio() {
    while(true)
        Assets.audioEngine.Update();
}

我对 c# 中的多线程和线程安全非常陌生,所以任何建议都会很棒。

谢谢, 马里奥斯

编辑:我切换了线程并使用了这样的锁:

audioUpdateThread = new Thread(new ThreadStart(setupWorld));
audioUpdateThread.IsBackground = true;
audioUpdateThread.Start();
lockHelp.loadingLevel = true;
updateAudio();

主线程现在更新音频:

while(true)
{
    Assets.audioEngine.Update();
    lock (lockHelp)
        if (!lockHelp.loadingLevel)
            break;
}
audioUpdateThread.Abort();

当新线程完成加载关卡时,它会锁定帮助对象并将 loadingLevel 设置为 false:

lock (lockHelp)
    lockHelp.loadingLevel = false;

我现在没有遇到任何问题,但游戏测试员确实在关卡负载时遇到了问题。

4

0 回答 0