#include "iostream"
#include "windows.h"
using namespace std;
DWORD WINAPI ThreadProc1(LPVOID lpParam);
DWORD WINAPI MonitorProc(LPVOID pvContext);
DWORD WINAPI CheckWindows(LPVOID pvVal);
HANDLE hEvent = NULL;
HANDLE hThread1 = NULL;
HANDLE hThread2 = NULL;
// 事件保证 ThreadProc1运行完成,CheckTrayWindows设置为有信号,MonitorProc等到有信号状态, 说明完成了threadproc1过程
int main(int argc, char *args[])
{
hEvent = CreateEvent(NULL, FALSE, FALSE, L"test"); // 自动重置,初始无信号状态
hThread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc1, NULL, 0,NULL);
Sleep(200);
if ( NULL == hThread1)
{
cout <<"create thread fail!";
}
MonitorProc(NULL);
return 0;
}
DWORD WINAPI CheckWindows(LPVOID pvVal)
{
cout <<"CheckTrayWindows in "<<endl;
hEvent =CreateEvent(NULL, FALSE, FALSE, L"test");// 再次create event 自动无信号
if (hEvent)
{
SetEvent(hEvent); //发信号
CloseHandle(hEvent);
}
cout <<"CheckTrayWindows out "<<endl;
return 0;
}
DWORD WINAPI MonitorProc(LPVOID pvContext)
{
cout <<"MonitorProc in "<<endl;
if (WAIT_OBJECT_0 == WaitForSingleObject(hEvent, 10000))
{
cout<<"MonitorProc aft WaitForSingleObject InstallEvent\n";
}
cout <<"MonitorProc out "<<endl;
return 0;
}
DWORD WINAPI ThreadProc1(LPVOID lpParam)
{
cout <<"in thread1 in @!"<<endl;
CheckWindows(NULL);
cout <<"in Thread1 out @!"<<endl;
/*
DWORD dReturn = WaitForSingleObject(hEvent,INFINITE);
if ( WAIT_OBJECT_0 == dReturn)
{
cout <<" thread1 signaled ! "<<endl;
}
cout <<"in thread1 --signal"<<endl;
*/
return 0;
}
自动重置事件练习
最新推荐文章于 2022-07-23 15:55:53 发布