win32 event事件

原文地址:https://blog.csdn.net/u011394598/article/details/82981399安全

SetEvent/ResetEvent分別將EVENT置爲這兩種狀態分別是發信號與不發信號。

WaitForSingleObject()等待,直到參數所指定的OBJECT成爲發信號狀態時才返回,OBJECT能夠是EVENT,也能夠是其它內核對象。注:WaitForSingleObject的第一個參數必定不能爲空。

CreateEvent 用來建立或打開一個命名的或無名的事件對象,對於它的其餘解釋,請自行百科,這裏只簡單描述它的兩種經常使用用法!

CreateEvent 的定義以下:

HANDLE WINAPI CreateEvent(  
_In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes,                    //安全屬性
_In_     BOOL                  bManualReset,                         //設置信號復位方式爲自動恢復爲無信號狀態(FALSE)仍是手動恢復爲無信號狀態(TRUE)
 _In_     BOOL                  bInitialState,                        //初始狀態  
 _In_opt_ LPCTSTR               lpName                                //信號名稱,能夠爲Null
);



使用方法:
第一種狀況 自動恢復到無信號狀態

hEvent = CreateEvent(NULL, FALSE, TRUE, NULL); //復位方式爲自動恢復到無信號狀態,且初始狀態爲有信號.
DWORD dReturn = WaitForSingleObject(hEvent, 等待時間);  // 即調用完該方法後,hEvent 就變爲無信號狀態, 須要調用setEvent使其爲有信號狀態


hEvent 就會變爲無信號狀態,若是在某個時候再次須要上面的式子成立並經過,則須要使用下面的語句使其變爲有信號狀態(此方式只能解鎖一個等待線程,如需繼續解鎖,則須要再次使用下面的式子)

SetEvent(hEvent)


第二種狀況手動恢復到無信號狀態

hEvent = CreateEvent(NULL, TRUE, TRUE, NULL); //復位方式爲手動恢復到無信號狀態,且初始狀態爲有信號.
DWORD dReturn = WaitForSingleObject(hEvent, 等待時間); //調用該方法後,事件會自動變爲有信號


hEvent 就會自動再次變爲有信號狀態,上面的式子會直接執行並經過(同時有多個等待線程也會直接執行並經過),若是須要將hEvent設置爲無信號狀態,則須要手動使用下面的語句:

ResetEvent(hEvent);


注:上面的復位方式指的是恢復到無信號狀態的方式,若設置爲TRUE,則表示須要手動將其置爲無信號,若爲FALSE,則會自動變爲無信號,千萬別和信號量變爲有信號狀態的方式搞混了!

.net

相關文章
相關標籤/搜索