WaitForSingleObject的用法

Waits until the specified object is in the signaled state or the time-out interval elapses.

To enter an alertable wait state, use the WaitForSingleObjectEx function. To wait for multiple objects, use the WaitForMultipleObjects.

DWORD WINAPI WaitForSingleObject(
  __in          HANDLE hHandle,
  __in          DWORD dwMilliseconds
);

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

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

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

借鑑鏈接:http://blog.pfan.cn/embed/19089.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章