Win32函数中的WaitForMultipleObjects()允许你在同一时间等待一个以上的对象。你必须将一个由handles组成的数组交给此函数,并指定要等待其中一个对象或是全部的对象,下面就是这个函数的原型:
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_0到WAIT_ABANDONED_0+nCount - 1。
5)如果函数失败,它会传回WAIT_FAILED,这时候你可以使用GetLastError()找出失败的原因。
注意,handles数组中的元素个数有上限,绝对不能够超过MAXIMUM_WAIT_OBJECTS。