Функция PulseEvent (winbase.h)
Устанавливает для указанного объекта события состояние сигнала, а затем сбрасывает его в состояние без знака после освобождения соответствующего количества ожидающих потоков.
BOOL PulseEvent(
[in] HANDLE hEvent
);
[in] hEvent
Дескриптор объекта события. Функция CreateEvent или OpenEvent возвращает этот дескриптор.
Дескриптор должен иметь право доступа к EVENT_MODIFY_STATE. Дополнительные сведения см. в разделе Синхронизация безопасности объектов и прав доступа.
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Поток, ожидающий объекта синхронизации, может быть на мгновение удален из состояния ожидания с помощью APC в режиме ядра, а затем вернуться в состояние ожидания после завершения APC. Если вызов PulseEvent происходит во время удаления потока из состояния ожидания, поток не будет освобожден, так как PulseEvent освобождает только те потоки, которые ожидают в момент вызова. Таким образом, PulseEvent является ненадежным и не должен использоваться новыми приложениями. Вместо этого используйте переменные условия.
Для объекта события сброса вручную освобождаются все ожидающие потоки, которые могут быть немедленно освобождены. Затем функция сбрасывает состояние объекта события до nonsignaled и возвращает значение .
Для объекта события автоматического сброса функция сбрасывает состояние до nonsignaled и возвращается после освобождения одного ожидающего потока, даже если ожидается несколько потоков.
Если потоки не ожидают или потоки не могут быть немедленно освобождены, PulseEvent просто устанавливает состояние объекта события в состояние nonsignaled и возвращает значение .
Обратите внимание, что для потока, использующий функции ожидания с несколькими объектами для ожидания всех указанных объектов, PulseEvent может установить состояние объекта события в состояние signaled и сбросить его на беззнаковый, не вызывая возврата функции ожидания. Это происходит, если не все указанные объекты одновременно сигнализируются.
Соблюдайте особую осторожность при использовании SignalObjectAndWait и PulseEvent с Windows 7, так как использование этих API в нескольких потоках может привести к взаимоблокировке приложения. Потоки, передаваемые сигналом SignalObjectAndWait , вызывают PulseEvent , чтобы сообщить об объекте ожидания вызова SignalObjectAndWait . В некоторых случаях вызывающий объект SignalObjectAndWait не может вовремя получить состояние сигнала ожидающего объекта, что приводит к взаимоблокировке.
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | winbase.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |