原文地址: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