基本概念
等待函數:等待函數會讓一個線程自動進入等待狀態,直到指定的內核對象被觸發。
API
DWORD WaitForSingleObiect(
HANDLE hObject,
DWORD dwMilliseconds
);
作用:
使一個線程自動進去等待狀態。
參數:
hObject是一個內核對象,這個內核對象可以處於觸發狀態或者未觸發狀態。
dwMilliseconds用來指定線程願意用多長時間來等待對象被觸發,取值可以是0-INFINITE。INFINITE表示線程願意永遠等待該內核對象被觸發
返回值:
WaitForSingleObject的返回值表示爲什麼調用線程又能夠繼續執行了。
WAIT_OBJECT_0:表示因爲等待對象被觸發
WAIT_TIMEOUT:表示等待超時
WAIT_FAILED:傳入了無效的參數
這些返回值可以使用GetLastError()獲取
DWORD WaitForMultipleObjects(
DWORD dwCount,
CONST HANDLE* phObjects,
BOOL bWaitAll,
DWORD dwMilliseconds
)
作用:
使一個線程可以同時檢查多個內核對象的觸發狀態。
參數:
dwCount是我沒希望函數檢查的內核對象的數量,這個值必須在1-MAXIMUM_WAIT_OBJECTS(64)之間。
phObjects表示一個內核對象句柄的數組
bWaitAll表示該API的兩種方式。TRUE表示,在所有內核對象還沒被觸發前,函數不允許調用線程繼續執行。FALSE表示,有一個被觸發,線程便可繼續執行。
dwMilliseconds用來指定線程願意用多長時間來等待對象被觸發,取值可以是0-INFINITE。INFINITE表示線程願意永遠等待該內核對象被觸發
返回值:
WaitForSingleObject的返回值表示爲什麼調用線程又能夠繼續執行了。
1.WAIT_TIMEOUT:表示等待超時
2.WAIT_FAILED:傳入了無效的參數
3.如果bWaitAll傳入的是TRUE而且所有的對象都被觸發了,則返回WAIT_OBJECT_0。
否則如果傳入的是FALSE,則返回值是WAIT_OBJECT_0和(WAIT_OBJECT_0+dwCount-1)之間的任何一個值。
重點:當傳入false時,我們可以用返回值減去WAIT_OBJECT_0來做數組的索引值,判斷究竟是那個內核對象被觸發。