複製鏈接
請複製以下鏈接發送給好友

事件對象

鎖定
事件對象屬於內核對象,它包含一個使用計數,一個用於標識該事件時一個自動重置還是一個人工重置的布爾值,和另一個用於指定該事件處於已通知狀態還是未通知狀態的布爾值。
中文名
事件對象
外文名
event object
性    質
內核對象
方    法
有名的或匿名的事件對象

事件對象事件對象簡介

事件對象和互斥對象,一樣都屬於內核對象,它包含一個使用計數,一個用於標識該事件是一個自動重置還是一個人工重置的布爾值,和另一個用於指定該事件處於已通知狀態還是未通知狀態的布爾值。
由上面所述,可見事件對象可分為兩種,一種是人工重置的,另一種是自動重置的。當人工重置的事件得到通知時,等待該事件的所有線程均變為可調度線程。而當一個自動事件得到通知時,等待該事件的所有線程中只有一個線程變為可調度線程。

事件對象方法

,可以調用Windows API中的CreateEvent。它可以創建一個有名的或匿名的事件對象,函數原型如下HANDLE CreateEvent( LPSECURITY_ATTRIBUTESlpEventAttributes,
BOOLbManualReset,
BOOLbInitialState,
LPCTSTR lpName
);
第一參數lpEventAttributes是一個指向SECURITY_ATTRIBUTES結構指針,由它決定該函數返回的句柄是否能夠被子進程繼承,如果為NULL,則不能被繼承。通常指定為NULL(即默認的安全機制)。
第二參數bManualReset,若指定為TRUE,則創建一個人工重置的事件對象,此時可以利用函數
BOOL ResetEvent(HANDLE hEvent)人工重置其狀態為無信號的;若指定為FALSE,系統將創建一個自動重置對象,系統將自動將其狀態置為無信號的。
第三參數 bInitialState,若為TRUE則初始化創建的事件對象為有信號的(signaled),否則將創建的事件對象初始化為無信號的(nonsignaled)。
第四參數 lpName, 若指定為NULL,則創建一個匿名的事件對象。
返回值,如果函數成功,將返回一個該函數創建的事件對象的句柄。如果創建的事件對象是有名的,並且在調用該函數前,已經有一個同名的事件對象創建了,那麼該函數將返回一個指向已存在的事件對象的句柄,並且調用GetLastError(void)函數時,將返回ERROR_ALREADY_EXISTS;如果函數調用失敗,那麼它將返回NULL。