读书人

请教一下sndPlaySound的线程同步有关问

发布时间: 2012-01-30 21:15:58 作者: rapoo

请问一下sndPlaySound的线程同步问题,谢谢~~
我现在正在做一个报警程序,并在工程中加入了CTrayIcon类,想实现托盘显示程序图标,然后在报警事件来了之后实现托盘图标变换为警灯闪烁,同时使用sndPlaySound()函数报警,但是现在的问题是:虽然警灯图标替换和报警声音我都分别实现了,但是却不能同时播放,只能顺序执行,可能是线程互斥,请问大家如何解决?
谢谢~~~~~
我自己定义的一个替换托盘图标函数(全局函数),程序代码如下:
void PlayAVI(SERVERMESSAGE msg)
{
if (msg.Level == 0)return; //判断是否需要报警
m_TrayIcon.SetShowFlag(false);//设置标志位
int m_id=131; //131是第一个警灯图标的ID值
int m_count=0;
HICON m_Icon;
while(m_count <200){
m_Icon = AfxGetApp()-> LoadIcon(m_id);
m_TrayIcon.SetIcon(m_Icon);
if (m_id> 134) //总共四张警灯图标ID从131到134
m_id=131;
m_id++;
m_count++;
Sleep(50); //是警灯闪烁更加明显
}
m_Icon = AfxGetApp()-> LoadIcon(IDR_MAINFRAME);//最后报警完毕显示
m_TrayIcon.SetIcon(m_Icon); //程序默认的图标
}
然后在一个全局函数UINT MainWork(LPVOID parm)中
分别调用PlayAVI()和sndPlaySound(SoundPath, SND_SYNC|SND_NOWAIT|SND_LOOP )两个函数,我现在希望的是能够让它们同时执行,而不是分别执行,请大家帮帮我~
谢谢!~~~

[解决办法]
楼主还是用多线程吧
[解决办法]
sndPlaySound 有局限性,不能同时播放两个曲目。要想同时进行用DirectSound吧。

我以前用过这个,还不错,就是有几个地方没有检查错误,会Crash,自己Fix吧

http://www.codeproject.com/directx/dsoundwc.asp

读书人网 >VC/MFC

热点推荐