Поделиться через


Функция 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 для прерванного мьютекса.

Если флаг COWAIT_ALERTABLE установлен в dwFlags, значение WAIT_IO_COMPLETION указывает, что ожидание было завершено одним или несколькими асинхронными вызовами процедур пользовательского режима (APC), помещенными в очередь в поток.

Дополнительные сведения см. в разделе WaitForMultipleObjectsEx .

Возвращаемое значение

Эта функция может возвращать следующие значения.

Примечание Возвращаемое значение CoWaitForMultipleHandles может быть недетерминированным, если флаг COWAIT_ALERTABLE установлен в dwFlags или если pHandles содержит один или несколько дескрипторов для объектов мьютекса. Рекомендуемое решение — вызвать SetLastError(ERROR_SUCCESS) перед CoWaitForMultipleHandles.
 
Код возврата Описание
S_OK
Поступил сигнал о требуемом дескриптоле или дескрипторов.
E_INVALIDARG
pHandles имеет значение NULL, lpdwindexNULL, или 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
Header combaseapi.h (включая Objbase.h)
Библиотека Ole32.lib
DLL Ole32.dll

См. также раздел

COWAIT_FLAGS