WaitForSingleObject函數的使用


等待函數可使線程自願進入等待狀態,直到一個特定的內核對象變為已通知狀態為止。 

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()來等待其變為有信號.   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM