www.pudn.com > os_example.rar > Event.cpp
#include#include #include #include #define THREAD_INSTANCE_NUMBER 3 //全局变量 int iCounter=0; DWORD SubThreadA(void * pD) { int iID=(int)pD; //在内部重新打开 HANDLE hCounterIn=OpenEvent(EVENT_ALL_ACCESS,FALSE,"sam sp 44"); cout << "Thread " << iID << " begin." << endl; //设置成为有信号状态 Sleep(1000); cout << "Thread " << iID << " set event." << endl; SetEvent(hCounterIn); Sleep(1000); cout << "Thread " << iID << " end." << endl; CloseHandle(hCounterIn); return 0; } DWORD SubThreadB(void* pD) {//等待threadA结束后在继续执行 int iID=(int)pD; //在内部重新打开 HANDLE hCounterIn=OpenEvent(EVENT_ALL_ACCESS,FALSE,"sam sp 44"); if(WAIT_TIMEOUT == WaitForSingleObject(hCounterIn,10*1000)) { cout << "Thread " << iID << " wait time out." << endl; } else { cout << "Thread " << iID << " wait ok." << endl; } CloseHandle(hCounterIn); return 0; } void main(void) { HANDLE hCounter=NULL; if( (hCounter=OpenEvent(EVENT_ALL_ACCESS,FALSE,"sam sp 44"))==NULL) { //如果没有其他进程创建这个事件,则重新创建,该事件为人工重置事件 hCounter = CreateEvent(NULL,TRUE/*人工重置*/,FALSE,"sam sp 44"); } DWORD IDThread[THREAD_INSTANCE_NUMBER]; HANDLE hThread[THREAD_INSTANCE_NUMBER]; int i; cout << "Test of manual rest event." << endl; //创建线程 cout << "CreateThread" << endl; for (i=0;i