16,471
社区成员
发帖
与我相关
我的任务
分享
HEVENT hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
while(1)
{
//等5秒,由于hEvent一直是无信号状态,所以等5秒之后该函数就返回了
if(WAIT_TIMEOUT == WaitForSingleObject(hEvent,5*1000))
{
//你的变量跟踪逻辑
//....
//....
}
else //意思是hEvent变成有信号了,就退出当前线程,比如退出程序时,你得先关掉这个线程,只需调用SetEvent(hEvent)即可
{
break;
}
}
return 0;
}
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
while(1)
{
Sleep(5*1000);
if(bExit)
break;
//你的变量跟踪逻辑
//....
//....
}
return 0;
}
我之所以第一次不怎么写,是因为存在一种情况:
当你要退出应用程序时,线程搞好走在Sleep(5*1000); 然后你就必须死等5秒,等到线程退出后才能关闭程序,而WaitForSingleObject就不会存在这种情况,HEVENT只要是有信号了或者没信号但等待超时了,它都会立即返回
或许你又会说了,我等它干嘛,直接exit,管它线程退出没退出呢,或者我直接TerminateThread那个线程,再exit
你要真这么想的话,我也只好说“呵呵”了