多線程之等待函數
一 等待函數
1)函數列舉
Wait function |
Description |
MsgWaitForMultipleObjects |
Waits until one or all of the specified objects are in the signaled state or the time-out interval elapses. The objects can include input event objects. |
MsgWaitForMultipleObjectsEx |
Waits until one or all of the specified objects are in the signaled state, an I/O completion routine or asynchronous procedure call (APC) is queued to the thread, or the time-out interval elapses. The array of objects can include input event objects. |
RegisterWaitForSingleObject |
Directs a wait thread in the thread pool to wait on the object. |
SignalObjectAndWait |
Atomically signals one object and waits on another object. |
UnregisterWait |
Cancels a registered wait operation. |
UnregisterWaitEx |
Cancels a registered wait operation. |
WaitForMultipleObjects |
Waits until one or all of the specified objects are in the signaled state or the time-out interval elapses. |
WaitForMultipleObjectsEx |
Waits until one or all of the specified objects are in the signaled state, an I/O completion routine or asynchronous procedure call (APC) is queued to the thread, or the time-out interval elapses. |
WaitForSingleObject |
Waits until the specified object is in the signaled state or the time-out interval elapses. |
WaitForSingleObjectEx |
Waits until the specified object is in the signaled state, an I/O completion routine or asynchronous procedure call (APC) is queued to the thread, or the time-out interval elapses. |
WaitOrTimerCallback |
An application-defined function that serves as the starting address for a timer callback or a registered wait callback. |
2)簡單說明WaitForSingleObject
DWORD WaitForSingleObject(HANDLE hObject,DWORD dwMilliseconds);
參數hObject:要等待的內核對象的句柄。
參數dwMilliseconds: 設置的等待超時的時間,以毫秒為單位。可以設置為INGINIT。
順便說一下,INFINITE已經定義為0xFFFFFFFF(或-1)。當然,傳遞INFINITE有些危險。如果對象永遠不變為已
通知狀態,那么調用線程永遠不會被喚醒,它將永遠處于死鎖狀態。
返回值:WAIT_OBJECT_0表示要等待的對象已經變為已通知的狀態。
WAIT_TIMEOUT表示設置的時間超時。
WAIT_FAILED表示失敗,可能是傳入的handle不正確或其他的問題。
DWORD dw = WaitForSingleObject(hProcess, 5000);
switch(dw)


{
case WAIT_OBJECT_0:
// The process terminated.
break;

case WAIT_TIMEOUT:
// The process did not terminate within 5000 milliseconds.
break;

case WAIT_FAILED:
// Bad call to function (invalid handle?)
break;
}
3)簡單說明WaitForMultipleObjects
DWORD WaitForMultipleObjects(DWORD dwCount,CONST HANDLE* phObjects,BOOL fWaitAll,DWORD dwMilliseconds);
參數dwCout:需要等待的內核對象的數量。
參數phObjects:需要等待的內核對象的是數組的指針。
參數fWaitAll:表示是否需要等待所有的內核對象。
參數dwMilliseconds:設置等待超時的時間。(同上函數)
返回值:WAIT_FAILED和WAIT_TIMEOUT同上函數。
如果為fWaitAll參數傳遞TRUE,同時所有對象均變為已通知狀態,那么返回值是WAIT_OBJECT_0。如果為fWaitAll傳遞FALSE ,那么一旦任何一個對象變為已通知狀態,該函數便返回。在這種情況下,你可能想要知道哪個對象變為已通知狀態。返回值是WAIT_OBJECT_0與(WAIT_OBJECT_0+dwCount- 1)之間的一個值。
HANDLE h[3];
h[0] = hProcess1;
h[1] = hProcess2;
h[2] = hProcess3;
DWORD dw = WaitForMultipleObjects(3, h, FALSE, 5000);
switch(dw)


{
case WAIT_FAILED:
// Bad call to function (invalid handle?)
break;

case WAIT_TIMEOUT:
// None of the objects became signaled within 5000 milliseconds.
break;

case WAIT_OBJECT_0 + 0:
// The process identified by h[0] (hProcess1) terminated.
break;

case WAIT_OBJECT_0 + 1:
// The process identified by h[1] (hProcess2) terminated.
break;

case WAIT_OBJECT_0 + 2:
// The process identified by h[2] (hProcess3) terminated.
break;
}
二 參考msdn和windows核心編程。