CreateEvent 函式用法

2021-08-24 23:50:11 字數 2974 閱讀 2942

函式功能描述:建立或開啟乙個命名的或無名的事件物件

函式原型:

handle createevent(

lpsecurity_attributes lpeventattributes,// 安全屬性

bool bmanualreset,// 復位方式

bool binitialstate,// 初始狀態

lpctstr lpname// 物件名稱

);引數:

lpeventattributes:

[輸入]乙個指向security_attributes結構的指標,確定返回的控制代碼是否可被子程序繼承。如果lpeventattributes是null,此控制代碼不能被繼承。

windows nt/2000:lpeventattributes的結構中的成員為新的事件指定了乙個安全符。如果lpeventattributes是null,事件將獲得乙個預設的安全符。

bmanualreset:

[輸入]指定將事件物件建立成手動復原還是自動復原。如果是true,那麼必須用resetevent函式來手工將事件的狀態復原到無訊號狀態。如果設定為false,當事件被乙個等待執行緒釋放以後,系統將會自動將事件狀態復原為無訊號狀態。

binitialstate:

[輸入]指定事件物件的初始狀態。如果為true,初始狀態為有訊號狀態;否則為無訊號狀態。

lpname:

[輸入]指定事件的物件的名稱,是乙個以0結束的字串指標。名稱的字元格式限定在max_path之內。名字是對大小寫敏感的。

如果lpname指定的名字,與乙個存在的命名的事件物件的名稱相同,函式將請求event_all_access來訪問存在的物件。這時候,由於bmanualreset和binitialstate引數已經在建立事件的程序中設定,這兩個引數將被忽略。如果lpeventattributes是引數不是null,它將確定此控制代碼是否可以被繼承,但是其安全描述符成員將被忽略。

如果lpname為null,將建立乙個無名的事件物件。

如果lpname的和乙個存在的訊號、互斥、等待計時器、作業或者是檔案對映物件名稱相同,函式將會失敗,在getlasterror函式中將返回error_invalid_handle。造成這種現象的原因是這些物件共享同乙個命名空間。

終端服務(terminal services):名稱中可以加入"global/"或是"local/"的字首,這樣可以明確的將物件建立在全域性的或事務的命名空間。名稱的其它部分除了反斜槓(/),可以使用任意字元。詳細內容可參考kernel object name spaces。

windows 2000:在windows 2000系統中,沒有終端服務執行,"global/"和"local/"字首將被忽略。名稱的其它部分除了反斜槓(/),可以使用任意字元。

windows nt 4.0以及早期版本, windows 95/98:名稱中除了反斜槓(/),可以使用任意字元。

返回值:

如果函式呼叫成功,函式返回事件物件的控制代碼。如果對於命名的物件,在函式呼叫前已經被建立,函式將返回存在的事件物件的控制代碼,而且在getlasterror函式中返回error_already_exists。

如果函式失敗,函式返回值為null,如果需要獲得詳細的錯誤資訊,需要呼叫getlasterror。

備註:呼叫createevent函式返回的控制代碼,該控制代碼具有event_all_access許可權去訪問新的事件物件,同時它可以在任何有此事件物件控制代碼的函式中使用。

在呼叫的過程中,所有執行緒都可以在乙個等待函式中指定事件物件控制代碼。當指定的物件的狀態被置為有訊號狀態時,單物件等待函式將返回。

對於多物件等待函式,可以指定為任意或所有指定的物件被置為有訊號狀態。當等待函式返回時,等待執行緒將被釋放去繼續執行。

初始狀態在binitialstate引數中進行設定。使用setevent函式將事件物件的狀態置為有訊號狀態。使用resetevent函式將事件物件的狀態置為無訊號狀態。

當乙個手動復原的事件物件的狀態被置為有訊號狀態時,該物件狀態將一直保持有訊號狀態,直至明確呼叫resetevent函式將其置為無符號狀態。

當事件的物件被置為有訊號狀態時,任意數量的等待中線程,以及隨後開始等待的執行緒均會被釋放。

當乙個自動復原的事件物件的狀態被置為有訊號狀態時,該物件狀態將一直保持有訊號狀態,直至乙個等待執行緒被釋放;系統將自動將此函式置為無符號狀態。如果沒有等待執行緒正在等待,事件物件的狀態將保持有訊號狀態。

多個程序可持有同乙個事件物件的多個控制代碼,可以通過使用此物件來實現程序間的同步。下面的物件共享機制是可行的:

·在createevent函式中,lpeventattributes引數指定控制代碼可被繼承時,通過createprocess函式建立的子程序繼承的事件物件控制代碼。

·乙個程序可以在duplicatehandle函式中指定事件物件控制代碼,從而獲得乙個複製的控制代碼,此控制代碼可以被其它程序使用。

·乙個程序可以在openevent或createevent函式中指定乙個名字,從而獲得乙個有名的事件物件控制代碼。

使用closehandle函式關閉控制代碼。當程序停止時,系統將自動關閉控制代碼。當最後乙個控制代碼被關閉後,事件物件將被銷毀。

使用環境:

windows nt/2000:需要3.1或更高版本

windows 95/98:需要windows 95或更高版本

標頭檔案:定義在winbase.h;需要包含 windows.h。

導入庫:user32.lib

unicode:在windows nt/2000中,以 unicode 和 ansi 執行

參考:synchronization overview, synchronization functions, closehandle, createprocess, duplicatehandle, openevent, resetevent, security_attributes, setevent, object names

示例**:

// 建立乙個有名的,不能被繼承的,手動復原,初始狀態是無訊號狀態的事件物件

handle h = createevent(null,true,false,「myevent」);

CreateEvent函式解析 一

createevent 是乙個windows api 函式。它用來建立或開啟乙個命名的或無名的事件對像。如果想為物件指定乙個訪問掩碼,應當使用 createeventex函式。函式原型 handlecreateevent lpsecurity attributeslpeventattributes,...

CreateEvent人工重置事件物件

include include 人工重置的事件物件有訊號狀態,所有的執行緒都可以執行resetevent 自動重置的事件物件有訊號狀態,所有的執行緒只有乙個變為可排程執行緒 dword winapi threadproc1 lpvoid lpparameter dword winapi thread...

主動驅動事件執行 createEvent

1.createevent eventtype 引數 eventtype 共5種型別 events 包括所有的事件.htmlevents 包括 abort blur change error focus load reset resize scroll select submit unload 事件...