Функция WaitForMultipleObjectsEx (synchapi.h)
Ожидает, пока один или все указанные объекты находятся в сигнальном состоянии, подпрограмма завершения ввода-вывода или асинхронный вызов процедуры (APC) помещается в очередь в поток или истекает интервал времени ожидания.
Синтаксис
DWORD WaitForMultipleObjectsEx(
[in] DWORD nCount,
[in] const HANDLE *lpHandles,
[in] BOOL bWaitAll,
[in] DWORD dwMilliseconds,
[in] BOOL bAlertable
);
Параметры
[in] nCount
Количество дескрипторов объектов, на которые указывает массив, на который указывает lpHandles. Максимальное количество дескрипторов объектов — MAXIMUM_WAIT_OBJECTS. Этот параметр не может быть нулевым.
[in] lpHandles
Массив дескрипторов объектов. Список типов объектов, дескриптор которых можно указать, см. в следующем разделе "Примечания". Массив может содержать дескриптор объектов разных типов. Он может не содержать несколько копий одного дескриптора.
Если один из этих дескрипторов закрыт, пока ожидание по-прежнему ожидается, поведение функции не определено.
Дескриптор должен иметь право доступа SYNCHRONIZE. Дополнительные сведения см. в стандартных прав доступа.
[in] bWaitAll
Если этот параметр TRUE, функция возвращает состояние всех объектов в массиве lpHandles для сигнала. Если FALSE, функция возвращается, когда состояние любого из объектов будет сигнализировать. В последнем случае возвращаемое значение указывает объект, состояние которого привело к возврату функции.
[in] dwMilliseconds
Интервал времени ожидания в миллисекундах. Если задано ненулевое значение, функция ожидает, пока указанные объекты не будут сигнализировать, подпрограмма завершения ввода-вывода или APC находится в очереди или интервал истекает. Если dwMilliseconds равно нулю, функция не вводит состояние ожидания, если критерии не выполнены; он всегда возвращается немедленно. Если dwMillisecondsINFINITE, функция возвращается только в том случае, если указанные объекты сигнализируются или выполняется подпрограмма завершения ввода-вывода или APC.
Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 и Windows Server 2008 R2: значение dwMilliseconds включает время, потраченное в состояниях низкой мощности. Например, время ожидания сохраняет подсчет во время сна компьютера.
[in] bAlertable
Если этот параметр TRUE и поток находится в состоянии ожидания, функция возвращается, когда система очередей подпрограммы завершения ввода-вывода или APC, а поток выполняет подпрограмму или функцию. В противном случае функция не возвращается, а подпрограмма завершения или функция APC не выполняется.
Подпрограмма завершения помещается в очередь при завершении функции ReadFileEx или WriteFileEx. Функция ожидания возвращается и подпрограмма завершения вызывается только в том случае, если bAlertableTRUE, а вызывающий поток — это поток, инициируемый операцией чтения или записи. APC помещается в очередь при вызове QueueUserAPC.
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение указывает событие, вызвавшее возвращаемую функцию. Это может быть одно из следующих значений. (Обратите внимание, что WAIT_OBJECT_0 определяется как 0 и WAIT_ABANDONED_0 определяется как 0x000000080L.)
Возврат кода или значения | Описание |
---|---|
|
Если bWaitAllTRUE, возвращаемое значение в этом диапазоне указывает, что состояние всех указанных объектов сигнализирует.
Если bWaitAllFALSE, возвращаемое значение минус WAIT_OBJECT_0 указывает индекс массива lpHandles массива объекта, удовлетворяющего ожиданию. Если во время вызова сигнализировало несколько объектов, это индекс массива сигнального объекта с наименьшим значением индекса всех сигнальных объектов. |
|
Если bWaitAlltrue, возвращаемое значение в этом диапазоне указывает на то, что состояние всех указанных объектов сигнализируется, а по крайней мере один из объектов является заброшенным объектом мьютекса.
Если bWaitAllFALSE, возвращаемое значение минус WAIT_ABANDONED_0 указывает индекс массива lpHandles заброшенного объекта мьютекса, который удовлетворил ожидание. Владение объектом мьютекса предоставляется вызывающему потоку, а мьютекс имеет значение nonsignalaled. Если мьютекс защищает сведения о постоянном состоянии, его следует проверить на наличие согласованности. |
|
Ожидание было завершено одним или несколькими пользовательским режимом асинхронные вызовы процедур (APC) в очередь в поток. |
|
Интервал времени ожидания истек, условия, указанные параметром bWaitAll, не удовлетворены, и подпрограммы завершения не выполняются. |
|
Сбой функции. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError. |
Замечания
Функция WaitForMultipleObjectsEx определяет, выполнены ли критерии ожидания. Если критерии не были выполнены, вызывающий поток вводит состояние ожидания до тех пор, пока не будут выполнены условия условия ожидания или интервал ожидания истекает.
Если bWaitAllTRUE, операция ожидания функции завершается только в том случае, если состояние всех объектов было задано для сигнала. Функция не изменяет состояния указанных объектов до тех пор, пока состояния всех объектов не будут заданы для сигнала. Например, мьютекс может быть сигнален, но поток не получает владение до тех пор, пока состояния других объектов также не будут сигнализировать. В то же время некоторый другой поток может получить владение мьютексом, тем самым задав его состояние незначаемым.
Если bWaitAllFALSE, эта функция проверяет дескрипторы в массиве, начиная с индекса 0, пока один из объектов не будет сигнализован. Если несколько объектов становятся сигнализованными, функция возвращает индекс первого дескриптора в массиве, объект которого был сигнализован.
Функция изменяет состояние некоторых типов объектов синхронизации. Изменение происходит только для объекта или объектов, состояние которого привело к возврату функции. Например, количество объектов семафора уменьшается на один. Дополнительные сведения см. в документации по отдельным объектам синхронизации.
Чтобы ожидать более MAXIMUM_WAIT_OBJECTS дескрипторов, используйте один из следующих методов:
- Создайте поток для ожидания MAXIMUM_WAIT_OBJECTS дескрипторов, а затем дождитесь этого потока и других дескрипторов. Используйте этот метод для разбиения дескрипторов на группы MAXIMUM_WAIT_OBJECTS.
- Вызовите RegisterWaitForSingleObject или SetThreadpoolWait, чтобы дождаться каждого дескриптора. Пул потоков эффективно ожидает дескриптора и назначает рабочий поток после того, как объект будет сигнализировать или истекает интервал времени ожидания.
- Уведомление об изменении
- Входные данные консоли
- Событие
- Уведомление о ресурсе памяти
- Мьютекс
- Процесс
- Семафор
- Нить
- Таймер ожидания
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP [классические приложения | Приложения UWP] |
минимальный поддерживаемый сервер | Windows Server 2003 [классические приложения | Приложения UWP] |
целевая платформа | Виндоус |
заголовка | synchapi.h (включая Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
библиотеки |
Kernel32.lib |
DLL | Kernel32.dll |