2010-06-27 83 views
1

Mabye某人在這裏可以向我解釋我在做什麼錯誤......這是在網上閱讀了大量文章並且在那裏說什麼......並且不工作。 ...MFC項目中的線程問題

我的問題是,我正在開發一個漂亮的小遊戲,背景音樂和爆炸聲,爆炸我知道我需要使用線程或我的音樂停止時,第一個發生,我正在使用線程但停止....

這裏是我的代碼....這是很簡單的,但我想這那邊有一個錯誤....

  1. 這是* .h文件中的GLOBAL decleration:

    UINT CMonstersThread(LPVOID Param);

  2. 這是在* cpp文件線程函數:

    UINT CMonstersThread(LPVOID帕拉姆) { PlaySoundA( 「聲音\ expl06.wav」,NULL,SND_ASYNC); AfxEndThread(0); return FALSE; }

  3. 這是每一次 「友好的」 被打到呼籲線程(在同一個* .cpp文件):

    AfxBeginThread(CMonstersThread,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL );

這是我所有的代碼.....從我得到了在網上,它要高度重視工作......但沒有做什麼要高度重視....

在10倍事先,

埃雷茲

+0

一些問題(更完整的代碼會有所幫助):在等待一個聲音完成之前,您是否正在播放不同的聲音?你看過同步播放聲音而不是異步播放嗎?你的線程對象是否過早死亡?很難從您發佈的代碼中知道發生了什麼。您也可以調用'PlaySound(NULL,0,0)'來阻止,直到當前聲音完成。 – 2010-06-27 19:43:53

+0

對不起,mabye是問題所在?那我沒有所有需要的代碼?,我真的不知道....第一次在MFC中使用線程,在Java中,它很容易做這樣的事情..... 對於你questians : 1.我需要背景音樂繼續播放,它一直在播放,應該在播放和播放後繼續播放。 2.我試着玩爆炸同步,它沒有任何區別,背景聲音停止播放第二個線程方法發生。 – Erez 2010-06-27 19:52:28

+0

3.我不介意打擾線程或讓它活着....甚至有助於我解決問題。我不需要它直到下一次碰撞發生,所以我沒有看到任何表演讓它活着,但我不介意。我希望能幫助你更多地幫助我... 10x :-) 4.從我所知道的PlaySound(NULL,0,0)採樣當前聲音...不是?它如何幫助我解決問題?我需要背景音來保持活着.... :-) Mabye我不明白..... :-( – Erez 2010-06-27 19:53:01

回答

0

我建議使用最新的DirectX SDK中的XAudio2來播放你的音頻。我會採取更多的工作&代碼,但最終的結果會更好,因爲您可以單獨加載聲音文件來播放它。

使用'PlaySound'時,如果您嘗試在事件發生後立即使用它,您會發現音頻滯後,例如鼠標點擊或怪物死亡/爆炸,並且您不會使用XAudio2進行播放。我從經驗得到的這個結論。

由於您已經在使用Visual Studio,我還建議您儘可能使用VS 2010,因爲[併發運行時,並行模式庫和代理程序庫] 1使線程和任務佔用少一點的代碼。

http://code.msdn.com/concrtextras也有樣品,您也可以在這裏找到一些有用的東西。

-Rick

0

您可能想看看使用功能更齊全的圖書館爲您的音樂和聲音播放,如irrKang。我不知道winmm.dll會爲你提供你所需要的。

0

我在您發佈的代碼中看到的唯一問題是CMonstersThread未聲明爲__stdcall。

你說其他一些線程有問題,但沒有看到代碼,很難猜測它的問題可能是什麼。

+0

它不應該是必需的 – 2010-06-28 02:30:52

+0

好吧,如果目標函數調用AfxEndThread那麼沒有其他組件將等待目標函數清理堆棧的最後一部分,但要注意目標函數是否以其他方式終止 – 2010-06-28 08:50:12

+0

我看到你來自哪裏,但根據給出的信息,我認爲他的問題是一個更簡單的聲音API問題。 – 2010-06-28 13:38:18

0

我不認爲這是可能使用任何Windows的功能,如PlaySound或sndPlaySound並行播放多個聲音。正如已經建議的,你可能想看看DirectSound或類似的API。