【问题标题】:Win32 API multithreading to play .wav file with no lagWin32 API 多线程播放 .wav 文件没有延迟
【发布时间】:2014-05-25 23:29:54
【问题描述】:

我正在尝试在我的 Win32 API pong 游戏中播放 .wav 声音。当一个桨向另一个桨发射“火球”时,我想播放 .wav 文件,但是在声音持续期间一切都停止了。我想用多线程来解决这个问题。

我试图解决这个问题的方式没有区别:

线程创建和函数调用:

std::thread t1(&Game::PlayFire, this);
t1.join();

播放声音功能:

void Game::PlayFire()
{
PlaySound(TEXT("fireball.wav"), NULL, SND_FILENAME);
}

我真的只是在寻找 std::head 解决方案,但是任何可能的答案都值得赞赏。

谢谢! 谢恩

【问题讨论】:

  • 替换 t1.join();用 t1.detach();有效,但是我不确定这是否安全。我想我会发布它以防其他人遇到这个问题,并且我没有得到比我可以从谷歌中刮出的更多知识的帮助。更多帮助绝对值得赞赏,但这是一个有点有用的解决方案,前提是我没有遗漏任何东西。
  • 您不需要将SND_ASYNC 作为标志传递吗?

标签: c++ multithreading winapi delay wav


【解决方案1】:

对 t1.join 的调用会阻止立即线程继续执行,直到 t1 完成

【讨论】:

  • 谢谢,这是一个开始。老实说,我认为主游戏线程仍然暂停。这就是为什么我正在寻找解决方案或指导。
  • 为了更详细地说明这一点,如果您要做的第一件事就是等待该线程退出,那么启动一个单独的线程来调用 PlaySound() 是没有意义的。
【解决方案2】:

考虑使用 std::thread::detach (http://en.cppreference.com/w/cpp/thread/thread/detach)。

【讨论】:

  • 啊,我刚刚在原始问题的评论中发布了这个。我相信这对我有用,我会在几个小时内将问题标记为已回答,以确保这是一个没有缺点的适当解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
相关资源
最近更新 更多