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


Объекты событий (синхронизация)

Объект события — это объект синхронизации, состояние которого может быть явно задано с помощью функции SetEvent. Ниже приведены два типа объекта события.

Объект Описание
Событие сброса вручную Объект события, состояние которого остается сигнальным до тех пор, пока функция ResetEvent явно не будет сброшена на незначимую. Во время передачи сигнала можно освободить любое количество ожидающих потоков или потоков, которые впоследствии указывают один и тот же объект события в одной из функций ожидания.
Событие автоматического сброса Объект события, состояние которого остается сигнальным до тех пор, пока не будет освобожден один поток ожидания, в этот момент система автоматически устанавливает состояние без знака. Если ожидающих потоков нет, состояние объекта события остается сигнальным. Если ожидается несколько потоков, выбирается ожидающий поток. Не предполагайте порядок "первым в очереди" (FIFO). Внешние события, такие как APC в режиме ядра, могут изменить порядок ожидания.

 

Объект события полезен при отправке в поток сигнала, указывающего на то, что произошло определенное событие. Например, в перекрывающихся входных и выходных данных система присваивает указанному объекту события сигнальное состояние после завершения перекрывающейся операции. Один поток может указать различные объекты событий в нескольких одновременных перекрывающихся операциях, а затем использовать одну из функций ожидания с несколькими объектами, чтобы дождаться получения сигнала о состоянии любого из объектов событий.

Поток использует функцию CreateEvent или CreateEventEx для создания объекта события. Создаваемый поток определяет начальное состояние объекта и указывает, является ли он объектом события сброса вручную или автоматическим сбросом. Создающий поток также может указать имя объекта события. Потоки в других процессах могут открывать дескриптор для существующего объекта события, указывая его имя в вызове функции OpenEvent . Дополнительные сведения об именах объектов мьютексов, событий, семафоров и таймеров см. в разделе Синхронизация между процессами.

Использование объектов событий