第一個函數:BOOL CMutexDlg::OnInitDialog(){GloMutex = ::CreateMutex(NULL, FALSE, "Mutex1"); //創建互斥信號量ReleaseMutex(GloMutex);CWinThread *pTSocket = AfxBeginThread(SktThreadFromSer, this, 。。。。)SetTimer(1,2000,NULL);SetTimer(2,5000,NULL);}第二個相關函數:void CMutexDlg::OnTimer(UINT nIDEvent) {if(nIDEvent == 1){int i = WaitForSingleObject(GloMutex, 0);SetDlgItemInt(IDC_STATIC,i);}if(nIDEvent == 2)ReleaseMutex(GloMutex);}第三個相關函數:UINT SktThreadFromSer(LPVOID pParm){while(1){WaitForSingleObject(GloMutex, INFINITE);AfxMessageBox("fdjasi");ReleaseMutex(GloMutex);Sleep(5500);}}說明:定時器1定時2秒,定時器2定時5秒,線程睡眠5.5秒,開始線程彈出消息框,然后釋放互斥量,之后睡眠5.5秒,2秒后定時器1獲取信號,4秒時還是獲取信號,但此時返回結果應該是258啊,(0x102),但事實還是0,這是錯誤一,當5秒時釋放信號信號,當5.5秒的時候線程醒來,應該會得到信號彈出消息框啊,事實上沒有,這是錯誤二,請教原因!
1 回答

Qyouu
TA貢獻1786條經驗 獲得超11個贊
只需要改一個地方,將:
if(nIDEvent == 2)
ReleaseMutex(GloMutex);
改為
if(nIDEvent == 2)
while(ReleaseMutex(GloMutex));
因為你的1號定時器執行頻率較2號高,所以WaitForSingleObject被調用了多次,所以需要多個ReleaseMutex對應釋放。
- 1 回答
- 0 關注
- 93 瀏覽
添加回答
舉報
0/150
提交
取消