【问题标题】:Thread Background music in MFC single DocumentMFC单文档中的线程背景音乐
【发布时间】:2021-09-02 14:13:22
【问题描述】:

我正在尝试实现一个背景音乐循环并发出其他声音,当我再次使用“PlaySound”功能时,它不会被切断。

    void CcpPongView::playBGsound(int num)
{
    //added in the linker to additional name : winmm.lib
    if(num)
        PlaySound(L"sound.wav", NULL, SND_LOOP | SND_ASYNC);
}

void CcpPongView::initGame()
{
    std::thread test (playBGsound, 1);
    test.join();
}

这是我使用 Playsound 的第二个地方

    void Ball::playSound()
{
    switch (rand()%2) {
    case 0:PlaySound(sounds[0], NULL, SND_FILENAME | SND_ASYNC);
        break;
    case 1:PlaySound(sounds[1], NULL, SND_FILENAME | SND_ASYNC);
        break;
}

我不确定我需要在哪里放置线程或如何在 mfc Single Document 中创建线程.. (“num”是用来测试的)

如果有其他方法可以做到这一点,我会全神贯注 谢谢大家的帮助:)

【问题讨论】:

    标签: c++ mfc playsound


    【解决方案1】:

    您创建的std::thread 需要更像这样:

    std::thread test (&CcpPongView::playBGsound, this, 1);
    

    请注意,在创建线程后立即在线程上调用join() 是对线程的浪费。您也可以直接拨打playBGSound()。如果你想创建一个线程并让它在std::thread被销毁后继续运行,调用detach()而不是join()。否则,在线程停止运行之前不要销毁std::thread(即,将其存储在CcpPongView 类的成员中),在这种情况下,您可以使用join()。

    并且,you can't play multiple sounds simultaneously with PlaySound() 使用 SND_ASYNC 标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 2012-06-20
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多