第一个函数:
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秒的时候线程醒来,应该会得到信号弹出消息框啊,事实上没有,这是错误二,请教原因!
Qyouu
相关分类