事件,事件對象,CreateEvent()

事件:

     事件是可以被控件識別的操作,如按下確定按鈕,選擇某個單選按鈕或者複選框。每一種控件有自己可以識別的事件,如窗體的加載、單擊、雙擊等事件,編輯框(文本框)的文本改變事件,等等。

事件對象:

事件對象和 互斥對象,一樣都屬於 內核對象,它包含:(1)一個使用計數,(2)一個用於標識該事件是一個自動重置還是一個人工重置的布爾值,(3)另一個用於指定該事件處於已通知狀態還是未通知狀態的布爾值。

由上面所述,可見事件對象可分爲兩種,一種是人工重置的,另一種是自動重置的。當人工重置的事件得到通知時,等待該事件的所有線程均變爲可調度線程。而當一個自動事件得到通知時,等待該事件的所有線程中只有一個線程變爲可調度線程。

CreateEvent:

CreateEvent是一個WindowsAPI函數。它用來創建或打開一個命名的或無名的事件對像。如果想爲對象指定一個訪問掩碼,應當使用CreateEventEx函數。

HANDLECreateEvent(

LPSECURITY_ATTRIBUTESlpEventAttributes,// 安全屬性,一個指向SECURITY_ATTRIBUTES結構的指針,確定返回的句柄是否可 被子進程繼承。如果lpEventAttributes是NULL,此句柄不能被繼承。

BOOLbManualReset,// 復位方式,指定將事件對象創建成手動復原還是自動復原。如果是TRUE,那麼必須用ResetEvent函數來手 工將事件的狀態復原到無信號狀態。如果設置爲FALSE,當一個等待線程被釋放以後,系統將會自動將事 件狀態復原爲無信號狀態。

BOOLbInitialState,// 初始狀態。指定事件對象的初始狀態。如果爲TRUE,初始狀態爲有信號狀態;否則爲無信號狀態。

LPCTSTRlpName // 對象名稱,指定事件的對象的名稱,是一個以0結束的字符串指針。名稱的字符格式限定在MAX_PATH之內。名 字是對大小寫敏感的。

);

如果函數調用成功,函數返回事件對象的句柄。如果對於命名的對象,在函數調用前已經被創建,函數將返回存在的事件對象的句柄,而且在GetLastError函數中返回ERROR_ALREADY_EXISTS。

如果函數失敗,函數返回值爲NULL,如果需要獲得詳細的錯誤信息,需要調用GetLastError。

指定事件的對象的名稱,是一個以0結束的字符串指針。名稱的字符格式限定在MAX_PATH之內。名字是對大小寫敏感的。

如果lpName指定的名字,與一個存在的命名的事件對象的名稱相同,函數將請求EVENT_ALL_ACCESS來訪問存在的對象。這時候,由於bManualReset和bInitialState參數已經在創建事件的進程中設置,這兩個參數將被忽略。如果lpEventAttributes是參數不是NULL,它將確定此句柄是否可以被繼承,但是其安全描述符成員將被忽略。

如果lpName爲NULL,將創建一個無名的事件對象。

如果lpName的和一個存在的信號、互斥、等待計時器、作業或者是文件映射對象名稱相同,函數將會失敗,在GetLastError函數中將返回ERROR_INVALID_HANDLE。造成這種現象的原因是這些對象共享同一個命名空間





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