功能:

进程在该函数处等待(即暂停在此处),直到被指定的其中一个或者全部信号触发  也或者超过了最长等待时间时,跳出该函数,继续向下执行代码

 

函数:

DWORD WaitForMultipleObjects(

              DWORD       nCount,

    const HANDLE      *lpHandles,

                   BOOL       bWaitAll,

               DWORD       dwMilliseconds

);

 

参数说明:

nCount

lpHandles指向的数组中对象句柄的数量。对象句柄的最大数量为MAXIMUM_WAIT_OBJECTS。此参数不能为零。

lpHandles

对象句柄数组。该数组可以包含不同类型对象的句柄。但是它可能不包含同一句柄的多个副本。

如果在等待仍未完成的情况下关闭了这些句柄之一,则该函数的行为未定义。

句柄必须具有SYNCHRONIZE访问权限。

bWaitAll

如果此参数为TRUE,则当信号lpHandles数组中所有对象的状态设置为已通知信号时,该函数将返回。如果为FALSE,则当任何一个对象的状态设置为已信号通知时,该函数将返回。在后一种情况下,返回值指示其状态导致函数返回的对象。

dwMilliseconds

超时间隔(以毫秒为单位)。如果指定了非零值,则函数将等待,直到发出指定对象的信号或间隔过去为止。如果dwMilliseconds为零,则如果未发出指定对象的信号,则函数不会进入等待状态;否则,函数将进入等待状态。它总是立即返回。如果dwMillisecondsINFINITE,则该函数仅在发出指定对象的信号时返回。

 

返回值说明

WaitForMultipleObjects

 

使用举例:

(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);

 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-20
  • 2022-12-23
  • 2021-08-07
  • 2022-01-22
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-06
  • 2022-12-23
  • 2021-05-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-01
相关资源
相似解决方案