Win32多线程之WaitForMultipleObjects

来源:互联网 发布:橙光游戏制作软件 编辑:程序博客网 时间:2024/04/29 22:45

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。