大家好,我把MCI设备打开MID文件,放在一个线程中。程序运行后,点击播放没有反应。我想加入背景音乐。如果放在主线程中执行,程序可以播放MID文件。代码如下:
打开Mid文件:
void CFiveDlg::MciOpen()
{
MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType=(LPCSTR)MCI_DEVTYPE_SEQUENCER;//MIDI类型
OpenParms.lpstrElementName="E:\\五子棋\\开心五子棋\\res\\bk.MID";
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,
(DWORD)(LPVOID)&OpenParms);
m_wDeviceID=OpenParms.wDeviceID;
}
放在主线程OnInitDialog()中,运行正常。
放在一线程中代码如下:
BOOL CFiveDlg::OnInitDialog()
{
....
g_MciOpen=CreateThread(NULL,0,ThreadProc,this,0,NULL);
CloseHandle(g_MciOpen);
}
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
CFiveDlg *pFiveDlg=(CFiveDlg*)lpParameter;
pFiveDlg->MciOpen();
return 0;
}
断点运行线程每行代码均被执行。但是就是不能播放mid文件。求高手帮帮给看看,谢谢了!
打开Mid文件:
void CFiveDlg::MciOpen()
{
MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType=(LPCSTR)MCI_DEVTYPE_SEQUENCER;//MIDI类型
OpenParms.lpstrElementName="E:\\五子棋\\开心五子棋\\res\\bk.MID";
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,
(DWORD)(LPVOID)&OpenParms);
m_wDeviceID=OpenParms.wDeviceID;
}
放在主线程OnInitDialog()中,运行正常。
放在一线程中代码如下:
BOOL CFiveDlg::OnInitDialog()
{
....
g_MciOpen=CreateThread(NULL,0,ThreadProc,this,0,NULL);
CloseHandle(g_MciOpen);
}
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
CFiveDlg *pFiveDlg=(CFiveDlg*)lpParameter;
pFiveDlg->MciOpen();
return 0;
}
断点运行线程每行代码均被执行。但是就是不能播放mid文件。求高手帮帮给看看,谢谢了!
mciSendCommand(m_wDeviceID,MCI_PLAY,MCI_WAIT|MCI_NOTIFY,(DWORD)(LPVOID)&PlayParms);
m_bMusic=true;
mciSendCommand(m_wDeviceID,MCI_PLAY,MCI_WAIT,(DWORD)(LPVOID)&PlayParms);
这样可以播放。如果将播放参数改为MCI_NOTIFY也不行了。
MCI_NOTIFY在子线程中播放不了?这个可以的,我试过