CoWaitForMultipleHandles 函数 (combaseapi.h)

等待指定句柄发出信号,或等待指定的超时期限过。

语法

HRESULT CoWaitForMultipleHandles(
  [in]  DWORD    dwFlags,
  [in]  DWORD    dwTimeout,
  [in]  ULONG    cHandles,
  [in]  LPHANDLE pHandles,
  [out] LPDWORD  lpdwindex
);

参数

[in] dwFlags

等待选项。 可能的值取自 COWAIT_FLAGS 枚举。

[in] dwTimeout

超时时间(以毫秒为单位)。

[in] cHandles

pHandles 数组中的元素数。

[in] pHandles

句柄数组。

[out] lpdwindex

指向变量的指针,当返回的状态为S_OK时,该变量接收一个值,该值指示导致函数返回的事件。 此值通常是已发出信号的句柄的 pHandles 中的索引。

如果 pHandles 包含一个或多个互斥对象的句柄,则 WAIT_ABANDONED_0 与 (WAIT_ABANDONED_0 + nCount - 1 之间的值) 指示已放弃的互斥体的 pHandles 索引。

如果在 dwFlags 中设置了COWAIT_ALERTABLE标志,则值 WAIT_IO_COMPLETION 表示等待已由一个或多个用户模式异步过程调用结束, (APC) 排队到线程。

有关详细信息,请参阅 WaitForMultipleObjectsEx

返回值

此函数可以返回以下值。

注意如果 COWAIT_ALERTABLE 标志在 dwFlags 中设置,或者 pHandles 包含互斥对象的一个或多个句柄,CoWaitForMultipleHandles 的返回值可能是不确定的。 建议的解决方法是在 CoWaitForMultipleHandles 之前调用 SetLastError (ERROR_SUCCESS)
 
返回代码 说明
S_OK
已发出所需的句柄或句柄的信号。
E_INVALIDARG
pHandlesNULLlpdwindexNULL,或者 dwFlags 不是 COWAIT_FLAGS 枚举中的值。
RPC_E_NO_SYNC
pHandles 的值为 0。
RPC_S_CALLPENDING
在发出所需句柄或句柄信号之前的超时期限。

注解

根据 dwFlags 参数中设置的标志, CoWaitForMultipleHandles 会阻止调用线程,直到发生以下事件之一:

  • 发出一个或所有句柄的信号。 对于互斥对象,放弃互斥体也满足此条件。
  • 异步过程调用 (APC) 已通过调用 QueueUserAPC 函数排队到调用线程。
  • 超时期限过期。
如果调用方驻留在单线程单元中, CoWaitForMultipleHandles 将进入 COM 模式循环,线程的消息循环将继续使用线程的消息筛选器调度消息。 如果未为线程注册消息筛选器,则使用默认 COM 消息处理。

如果调用线程驻留在 MTA) (多线程单元中, CoWaitForMultipleHandles 将调用 WaitForMultipleObjectsEx 函数。

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 combaseapi.h (包括 Objbase.h)
Library Ole32.lib
DLL Ole32.dll

另请参阅

COWAIT_FLAGS