首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请教一下sndPlaySound的线程同步有关问题,多谢~

2012-01-30 
请问一下sndPlaySound的线程同步问题,谢谢~~我现在正在做一个报警程序,并在工程中加入了CTrayIcon类,想实

请问一下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

热点排行