3c05a905

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


Событие является объектом синхронизации, чье состояние может быть явным образом установлено посредством вызовов RtSetEvent или RtPulseEvent. Существует два типа событий:

Событие со сбросом вручную (manual-reset) – событие, чье состояние остается свободным (signalled) до тех пор, пока не переведется в занятое (nonsignalled) состояние вызовом RtResetEvent. В свободном состоянии любое количество ждущих потоков или потоков, вызывающих WaitForSingleObject, могут продолжать исполнение.

Событие с автосбросом (auto-reset) – объект, чье состояние остается свободным до тех пор, пока единственный ждущий поток не продолжит выполнение. В этот момент система автоматически переводит объект в занятое состояние. Если нет ожидающих потоков, объект остается свободным.

События полезны при посылке сигналов потокам, уведомляя их о наступлении определенного события.

Использование RtCreateEvent

Поток использует RtCreateEvent для создание объекта событие. Создающий объект поток определяет начальное состояние события и его тип (с автосбросом или сбросом вручную). Этот поток может также задавать имя события (а может и не задавать). Потоки других процессов могут открывать хэндлы существующих событий указывая их имя в вызове RtOpenEvent.

Использование RtPulseEvent

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



Содержание раздела