Event 事件通常會用來控制同步操作,通俗地說就是一個流程中下一步操作會等待上一步操作結束纔開始。下面是個簡單的例子:
////創建事件對象
#define event_name "shared_event"
int main()
{
int time=100;
HANDLE event=NULL;
event=CreateEvent(NULL,TRUE,FALSE,event_name);//創建初始狀態爲nonsingaled可手動設置的 事件
if(event!=INVALID_HANDLE_VALUE)
{
while(time--)
{
switch(WaitForSingleObject(event,3000))//設置等待時間爲3秒,如果超時或者事件被設置爲singaled就返回
{//注意下面case是WaitForSingleObject()返回值,不是GetLastError()的 返回值
case WAIT_OBJECT_0://在3秒內,事件被設置爲由信號,可以進行下一步操作
//to do someting
ResetEvent(event);//這裏一定要重新將狀態爲singaled設置爲nonsingaled
printf("the event is set to singled.\n");
break;
case WAIT_TIMEOUT://3秒過了,事件沒有被設置成有信號狀態
//to do someting
printf("the WaitForSingleObject timekout elapsed.\n");
break;
default:
{
printf("an error:0x%x!\n",GetLastError());
goto retu;
}
}
}
}
else
{
printf("CreateEvent last error:0x%x\n",GetLastError());
}
retu:
if(event!=INVALID_HANDLE_VALUE)
CloseHandle(event);
return 0;
}
////打開事件對象
event=OpenEvent(GENERIC_READ|GENERIC_WRITE,FALSE,event_name);
if(event==INVALID_HANDLE_VALUE)
{
//完成某個操作後,設置事件爲singaled狀態
SetEvent(event);
CloseHandle(event);
}