功能:
进程在该函数处等待(即暂停在此处),直到被指定的其中一个或者全部信号触发 也或者超过了最长等待时间时,跳出该函数,继续向下执行代码
函数:
DWORD WaitForMultipleObjects(
DWORD nCount,
const HANDLE *lpHandles,
BOOL bWaitAll,
DWORD dwMilliseconds
);
参数说明:
nCount
lpHandles指向的数组中对象句柄的数量。对象句柄的最大数量为MAXIMUM_WAIT_OBJECTS。此参数不能为零。
lpHandles
对象句柄数组。该数组可以包含不同类型对象的句柄。但是它可能不包含同一句柄的多个副本。
如果在等待仍未完成的情况下关闭了这些句柄之一,则该函数的行为未定义。
句柄必须具有SYNCHRONIZE访问权限。
bWaitAll
如果此参数为TRUE,则当信号lpHandles数组中所有对象的状态设置为已通知信号时,该函数将返回。如果为FALSE,则当任何一个对象的状态设置为已信号通知时,该函数将返回。在后一种情况下,返回值指示其状态导致函数返回的对象。
dwMilliseconds
超时间隔(以毫秒为单位)。如果指定了非零值,则函数将等待,直到发出指定对象的信号或间隔过去为止。如果dwMilliseconds为零,则如果未发出指定对象的信号,则函数不会进入等待状态;否则,函数将进入等待状态。它总是立即返回。如果dwMilliseconds为INFINITE,则该函数仅在发出指定对象的信号时返回。
返回值说明
使用举例:
(1)使用该函数当做两个线程之间的标志位
首先建立两个事件
HANDLE m_InPoolEvent; //由A线程触发的事件
HANDLE m_OutPoolEvent; //由B线程触发的事件
m_InPoolEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
m_OutPoolEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
线程A等待线程B的标志位
HANDLE hEvent; //如果想使用两个事件做标志位,则HANDLE hEvent[2]; 设置一个事件数组
hEvent = m_OutPoolEvent;
u32Result = WaitForMultipleObjects(1, &hEvent, FALSE, INFINITE);
线程B触发
SetEvent(m_OutPoolEvent);