Win32多線程之WaitForMultipleObjects

Win32函數中的WaitForMultipleObjects()允許你在同一時間等待一個以上的對象。你必須將一個由handles組成的數組交給此函數,並指定要等待其中一個對象或是全部的對象,下面就是這個函數的原型:

DWORD WaitForMultipleObjects(
DWORD nCount,
const HANDLE* lpHandles,
BOOL bWaitAll,
DWORD dwMilliseconds
);
 參數

nCount : 表示lpHandles數組的元素個數。最大容量是MAXIMUM_WAIT_OBJECTS。

lpHandles:指向一個由對象handles所組成的數組。這些handles不需要爲相同的類型。

bWaitAll:如果此爲TRUE。表示所有的handles都必須激發,此函數才得以返回,否則此函數將在任何一個handle激發時就返回。

dwMilliseconds:當該時間長度終了時,即使沒有任何handles激發,此函數也會返回,此值可爲0,以便測試,亦可指定爲INFINITE,表示無窮等待。


返回值:

WaitForMultipleObjects()的返回值有些複雜。

 1)如果因時間終了而返回,則返回值是WAIT_TIMEOUT,類似WaitForSingleObject()。

2)如果bWait是TRUE,那麼返回值將是WAIT_OBJECT_0。

3)如果bWait是FALSE,那麼將返回值減去WAIT_OBJECT_0,就表示數組中的哪一個handle被激發了。

4)如果你等待的對象中有任何mutexes,那麼返回值可能從WAIT_ABANDONED_0WAIT_ABANDONED_0+nCount - 1。

5)如果函數失敗,它會傳回WAIT_FAILED,這時候你可以使用GetLastError()找出失敗的原因。

注意,handles數組中的元素個數有上限,絕對不能夠超過MAXIMUM_WAIT_OBJECTS。

   

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