WaitForSignalObject

DWORD WaitForSingleObject(HANDLE hObject, DWORD dwMilliseconds);
當執行緒調用該函式時,第一個參數hObject標識一個能夠支持被通知/未通知的核心對象
(前面列出的任何一種對象都適用)。第二個參數dwMilliseconds允許該執行緒指明,為了等待該
對象變為已通知狀態,它將等待多長時間。
調用下面這個函式將告訴系統,調用函式準備等待到hProcess句柄標識的進程終止運行為止:
WaitForSingleObject(hProcess, INFINITE);
第二個參數告訴系統,調用執行緒願意永遠等待下去(無限時間量),直到該進程終止運行。
通常情況下, INFINITE是作為第二個參數傳遞給WaitForSingleObject的,不過也可以傳遞
任何一個值(以毫秒計算)。順便說一下, I N F I N I T E已經定義為0xFFFFFFFF(或-1)。當然,
傳遞I N F I N I T E有些危險。如果對象永遠不變為已通知狀態,那么調用執行緒永遠不會被喚醒,
它將永遠處於死鎖狀態,不過,它不會浪費寶貴的C P U時間。
DWORD dw = WaitForSingleObject(hProcess,5000);
switch(dw)
{
case WAIT_OBJECT_0: // The process terminated
break;
case WAIT_TIMEOUT: //The process did not terminated within 5000 milliseconds
break;
case WAIT_FAILED: //Bad call function (invalid handle?)
break;
}
上面這個代碼告訴系統,在特定的進程終止運行之前,或者在5000ms時間結束之前,調
用執行緒不應該變為可調度狀態。因此,如果進程終止運行,那么這個函式調用將在不到
5000ms的時間內返回,如果進程尚未終止運行,那么它在大約5000ms時間內返回。注意,不
能為dwMillisecond傳遞0。如果傳遞了0,WaitForSingleObject函式將總是立即返回。
WaitForSingleObject的返回值能夠指明調用執行緒為什麼再次變為可調度狀態。如果執行緒等
待的對象變為已通知狀態,那么返回值是WAIT_OBJECT_0。如果設定的逾時已經到期,則返
回值是WAIT_TIMEOUT。如果將一個錯誤的值(如一個無效句柄)傳遞給WaitForSingleObject,那么返回值將是WAIT_FAILED。

相關詞條

熱門詞條

聯絡我們