事件(Event)

事件(Event)对象也可以通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作,一个线程通过SetEvent()设置了事件的状态为有标记,将释放任意等待线程。如果事件是手工的,状态标记在调用ResetEvent()后变为无标记;如果事件是自动的,那么在释放了等待线程后就变为无标记。

下面是一个使用事件的多线程实现线程同步的实例:

#include<iostream>
#include<windows.h>
using namespace std;
int tickets=100;
HANDLE g_hEvent;
DWORD WINAPI ThreadProc(LPVOID lpParamter)
{
 while(TRUE)
 {
  if(tickets>0)
  {
   Sleep(1);
   tickets--;
  }
  else
   break;
 }
 SetEvent(g_hEvent);
 return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParamter)
{
 WaitForSingleObject(g_hEvent,INFINITE);
    printf("%s","tickets zero");
 return 0;
}
int main()
{
 HANDLE hThread1;
 HANDLE hThread2;
 g_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
 hThread1=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
 hThread2=CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
 CloseHandle(hThread1);
 CloseHandle(hThread2);
 Sleep(4000);
 CloseHandle(g_hEvent);
 return 0;
}

你可能感兴趣的:(事件(Event))