2010-06-27 34 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。