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執行一次,當設置事件爲有信號狀態時,線程就執行完畢了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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