【发布时间】:2013-07-20 04:24:14
【问题描述】:
我想让我的游戏播放一些音效。一开始,我打开了一些mp3文件mciSendString("open Muzle.mp3 alias Muzle");。
我的问题是mciSendString("play Muzle from 0"); 仍然会导致一点延迟,并且游戏必须经常播放声音。
在另一个问题中,我读到使用线程可以解决问题。我对使用线程完全陌生。现在的问题是声音不播放 :p 。我通过在最后给出一个 cout 来验证线程是否正常运行。
我现在有这个功能:
void Shout(string SoundName){
string FNstr;
wstring FNwstr;
FNstr = "play " + SoundName + " from 0";
FNwstr.assign(FNstr.begin(), FNstr.end());
mciSendString(FNwstr.c_str(), NULL, 0, NULL);
Sleep(2000);
cout << "Test woi\n";
}
(我也试过不使用 Sleep。我想知道我是否需要它,因为如果线程到达末尾,它可能会被删除并且声音终止......我不确定线程或 mmsystem 是如何工作的)
如果我简单地调用这个Shout() 函数,它会播放声音,执行睡眠(2000),然后cout。一切正常。但是我必须使用线程,所以我尝试:
thread(Shout, "Muzle");
我得到错误: abort() 已被调用。我想我可能需要分离线程:
thread t(Shout, "Muzle");
t.detach();
这样,一切看起来都正常(2 秒后,我看到控制台上打印了“Test woi”),但没有播放任何声音。
嗯,感谢您阅读所有内容^.^。你知道如何解决这个问题吗?
【问题讨论】:
标签: c++ multithreading winmm mcisendstring