WaitForSignalObject

 DWORD WaitForSingleObject,第一個參數hObject標識一個能夠支持被通知/未通知的核心對象,第二個參數dwMilliseconds允許該執行緒指明,為了等待該對象變為已通知狀態,它將等待多長時間。

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。

相關詞條

相關搜尋

熱門詞條

聯絡我們