windows編程學習——等待函數

 

                基本概念

 等待函數:等待函數會讓一個線程自動進入等待狀態,直到指定的內核對象被觸發。

                  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來做數組的索引值,判斷究竟是那個內核對象被觸發。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章