Event(事件)的簡單使用

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);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章