WaitForSingleObject的用法(轉)

WaitForSingleObject的用法                                       

 

WaitForSingleObject的用法

DWORD WaitForSingleObject(

  HANDLE hHandle,

  DWORD dwMilliseconds

);

參數hHandle是一個事件的句柄,第二個參數dwMilliseconds是時間間隔。如果事件是有信號狀態,返回WAIT_OBJECT_0,如果時間超過dwMilliseconds值但時間事件還是無信號狀態則返回WAIT_TIMEOUT

hHandle可以是下列對象的句柄:

    Change notification
Console input
Event
Job
Memory resource notification
Mutex
Process
Semaphore
Thread
Waitable timer 

 WaitForSingleObject函數用來檢測hHandle事件的信號狀態,當函數的執行時間超過dwMilliseconds就返回,但如果參數dwMillisecondsINFINITE時函數將直到相應時間事件變成有信號狀態才返回,否則就一直等待下去,直到WaitForSingleObject有返回直才執行後面的代碼。在這裏舉個例子:

先創建一個全局Event對象g_event:

    CEvent g_event;

在程序中可以通過調用CEvent::SetEvent設置事件爲有信號狀態。

下面是一個線程函數MyThreadPro()

UINT CFlushDlg::MyThreadProc( LPVOID pParam ) 

  

     WaitForSingleObject(g_event,INFINITE); 

      For(;;) 

     

         ………… 

     

     return 0;  

 

在這個線程函數中只有設置g_event爲有信號狀態時才執行下面的for循環,因爲g_event是全局變量,所以我們可以在別的線程中通過g_event. SetEvent控制這個線程。

 

還有一種用法就是我們可以通過WaitForSingleObject函數來間隔的執行一個線程函數的函數體

     UINT CFlushDlg::MyThreadProc( LPVOID pParam )  

 

     while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0)  

      

         ………………  

      

     return 0;  

 

在這個線程函數中可以可以通過設置MT_INTERVAL來控制這個線程的函數體多久執行一次,當事件爲無信號狀態時函數體隔MT_INTERVAL執行一次,當設置事件爲有信號狀態時,線程就執行完畢了。

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