等待函數可使線程自願進入等待狀態,直到一個特定的內核對象變為已通知狀態為止。
WaitForSingleObject 函數
DWORD WaitForSingleObject(
HANDLE hObject,
DWORD dwMilliseconds
);
第一個參數hObject標識一個能夠支持被通知/未通知的內核對象。
第二個參數dwMilliseconds允許該線程指明,為了等待該對象變為已通知狀態,它將等待多長時間。(INFINITE為無限時間量,INFINITE已經定義為0xFFFFFFFF(或-1))
傳遞INFINITE有些危險。如果對象永遠不變為已通知狀態,那么調用線程永遠不會被喚醒,它將永遠處於死鎖狀態,不過,它不會浪費寶貴的C P U時間。
產生事件對象的函數如下:
HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // SD BOOL bManualReset, // reset type BOOL bInitialState, // initial state LPCTSTR lpName // object name );
bManualReset:TRUE,使用ResetEvent()手動重置為無信號狀態;FALSE,當一個等待線程被釋放時,自動重置狀態為無信號狀態。
bInitialState:指定事件對象的初始狀態,當TRUE,初始狀態為有信號狀態;當FALSE,初始狀態為無信號狀態。
m_pathevent=CreateEvent(NULL,FALSE,FALSE,NULL);//線程釋放后自動重置為無信號狀態,初始化時為無信號狀態
一個Event被創建以后,操作函數:
用OpenEvent()API來獲得它的Handle,
用CloseHandle() 來關閉它,
用SetEvent()或PulseEvent()來設置它使其有信號,
用ResetEvent() 來使其無信號,
用WaitForSingleObject()或WaitForMultipleObjects()來等待其變為有信號.
