C++ c线程-为什么mmsystem(使用mciSendString)不播放声音文件?

C++ c线程-为什么mmsystem(使用mciSendString)不播放声音文件?,c++,multithreading,winmm,mcisendstring,C++,Multithreading,Winmm,Mcisendstring,我想让我的游戏玩一些sfx。开始时,我打开一些mp3文件mciSendString(“open Muzle.mp3 alias Muzle”) 我的问题是mciSendString(“从0播放Muzle”)仍然会导致一些延迟,游戏必须频繁播放这些声音 在另一个问题中,我读到使用线程可以解决这个问题。我对使用线程是完全陌生的。现在的问题是声音不能播放:p。我通过在最后给出一个cout来验证线程是否正常运行 我现在有这个功能: void Shout(string SoundName){ st

我想让我的游戏玩一些sfx。开始时,我打开一些mp3文件
mciSendString(“open Muzle.mp3 alias Muzle”)

我的问题是
mciSendString(“从0播放Muzle”)仍然会导致一些延迟,游戏必须频繁播放这些声音

在另一个问题中,我读到使用线程可以解决这个问题。我对使用线程是完全陌生的。现在的问题是声音不能播放: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";
}
我得到一个错误:abort()已被调用。我想我可能需要拆下螺纹:

thread t(Shout, "Muzle");
t.detach();
这样看来,一切正常(2秒钟后,我看到控制台上打印了“testwoi”),但没有播放任何声音


嗯,谢谢你阅读了所有内容。您知道如何解决此问题吗?

您应该有一个永久线程: 1.等待声音结束后再继续(假设这是您希望它工作的方式)。您可能只需要使用该选项即可。
2.当不播放声音时,等待命令播放下一个声音-使用发送消息到线程就是这样一种解决方案,但您可以使用其他方法

我需要游戏能够一次播放多个声音,所以如果我理解正确,如果我只有一个线程,我就不会使用等待。但问题是,当我使用线程xD调用它时,声音根本不会播放。我不知道为什么会这样。好吧,我不知道你到底需要做什么。如果你在谷歌上搜索“用MCI播放多个声音”,会出现很多问题,还有一些会出现“MCIsendstring多线程”,其中的一些建议似乎暗示在第二个线程中这样做并不容易——我认为这是因为事件处理的工作方式。如果你觉得我的答案没有任何用处,我会删除它。
thread t(Shout, "Muzle");
t.detach();