程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> WaitForSingleObject用法,waitforsingleobject

WaitForSingleObject用法,waitforsingleobject

編輯:C++入門知識

WaitForSingleObject用法,waitforsingleobject


對應函數

編輯 VC聲明 DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds );  

參數

編輯 hHandle[in]對象句柄。可以指定一系列的對象,如Event、Job、Memory resource notification、Mutex、Process、Semaphore、Thread、Waitable timer等。 dwMilliseconds[in]定時時間間隔,單位為milliseconds(毫秒).如果指定一個非零值,函數處於等待狀態直到hHandle標記的對象被觸發,或者時間到了。如果dwMilliseconds為0,對象沒有被觸發信號,函數不會進入一個等待狀態,它總是立即返回。如果dwMilliseconds為INFINITE,對象被觸發信號後,函數才會返回。     WaitForSingleObject函數用來檢測hHandle事件的信號狀態,在某一線程中調用該函數時,線程暫時掛起,如果在掛起的dwMilliseconds毫秒內,線程所等待的對象變為有信號狀態,則該函數立即返回;如果超時時間已經到達dwMilliseconds毫秒,但hHandle所指向的對象還沒有變成有信號狀態,函數照樣返回。參數dwMilliseconds有兩個具有特殊意義的值:0和INFINITE。若為0,則該函數立即返回;若為INFINITE,則線程一直被掛起,直到hHandle所指向的對象變為有信號狀態時為止。 WAIT_ABANDONED 0x00000080:當hHandle為mutex時,如果擁有mutex的線程在結束時沒有釋放核心對象會引發此返回值。 WAIT_OBJECT_0 0x00000000 :指定的對象出有有信號狀態 WAIT_TIMEOUT 0x00000102:等待超時 WAIT_FAILED 0xFFFFFFFF :出現錯誤,可通過GetLastError得到錯誤代碼   在這裡舉個例子: 先創建一個全局Event對象g_event: CEvent g_event; 在程序中可以通過調用CEvent::SetEvent設置事件為有信號狀態。 下面是一個線程函數MyThreadProc() 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執行一次,當設置事件為有信號狀態時,線程就執行完畢了。      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved