Составители:
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpsa, // привилегии доступа
// (по умолчанию = NULL)
BOOL bManualReset, // TRUE - событие должно быть
// сброшено вручную
BOOL bInitialState, // TRUE - создание события в
// сигнальном состоянии
LPTSTR lpszEventName ); //имя события (допускается
// значение NULL)
BOOL SetEvent ( HANDLE hEvent );
BOOL ResetEvent( HANDLE hEvent );
При установке параметра bInitialState функция CreateEvent создает событие, кото-
рое сразу же будет находиться в сигнальное состоянии. Функции SetEvent и ResetEvent в
случае успешного завершения возвращают значение TRUE, при возникновении ошибки
- значение FALSE.
Параметр bManualReset функции CreateEvent позволяет создать событие, сбрасы-
ваемое не вручную, а автоматически. Автоматически сбрасываемое событие переходит в
несигнальное состояние сразу же после выполнения функции SetEvent. Для таких собы-
тий функция ResetEvent является избыточной. Кроме того, перед автоматическим сбро-
сом по каждому сигналу событие освобождает только один поток. Автоматически сбра-
сываемые события целесообразно применять в таких программах, где один основной
поток подготавливает данные для других, вспомогательных потоков. При готовности
нового набора данных основной поток устанавливает событие, по которому освобожда-
ется один вспомогательный поток. Остальные вспомогательные потоки продолжают
ожидать подготовки новых данных.
Наряду с выполнением операций установки и сброса события можно сгенериро-
вать импульсное событие:
BOOL PulseEvent( hEvent ) ;
Импульсное событие включает сигнал на короткий промежуток времени. Приме-
нение этой функции для события, сбрасываемого вручную, позволяет оповестить о нем
все ожидающие потоки, а затем сбросить событие. Вызов функции для события, сбрасы-
ваемого автоматически, дает возможность оповестить только один ожидающий поток.
Если не было ни одного ожидающего потока, то никакой другой поток не будет опове-
щен. С другой стороны, установка автоматического события позволит оставить сигнал
включенным до тех пор, пока не появится ожидающий его поток. После оповещения по-
тока событие сбрасывается автоматически.
Семафоры, исключающие семафоры и события могут совместно использоваться
несколькими процессами, которые необязательно должны быть связаны друг с другом.
Путем совместного задействования синхронизирующих объектов процессы могут коор-
динировать свои действия по аналогии с тем, как это делают потоки. Существует три
механизма совместного использования. Первый из них - это наследование, при котором
один процесс создает новый процесс, получающий копии всех дескрипторов родитель-
ского процесса. Копируются только те дескрипторы, которые при создании были поме-
чены как доступные для наследования.
Два других метода сводятся к созданию второго дескриптора существующего объ-
екта с помощью вызова функций. Какая из функций будет вызвана, зависит от имею-
щейся информации. При наличии дескрипторов как исходного процесса, так и процесса,
назначения следует вызывать функцию DuplicateHandle, при наличии только имени объ-
74
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpsa, // привилегии доступа
// (по умолчанию = NULL)
BOOL bManualReset, // TRUE - событие должно быть
// сброшено вручную
BOOL bInitialState, // TRUE - создание события в
// сигнальном состоянии
LPTSTR lpszEventName ); //имя события (допускается
// значение NULL)
BOOL SetEvent ( HANDLE hEvent );
BOOL ResetEvent( HANDLE hEvent );
При установке параметра bInitialState функция CreateEvent создает событие, кото-
рое сразу же будет находиться в сигнальное состоянии. Функции SetEvent и ResetEvent в
случае успешного завершения возвращают значение TRUE, при возникновении ошибки
- значение FALSE.
Параметр bManualReset функции CreateEvent позволяет создать событие, сбрасы-
ваемое не вручную, а автоматически. Автоматически сбрасываемое событие переходит в
несигнальное состояние сразу же после выполнения функции SetEvent. Для таких собы-
тий функция ResetEvent является избыточной. Кроме того, перед автоматическим сбро-
сом по каждому сигналу событие освобождает только один поток. Автоматически сбра-
сываемые события целесообразно применять в таких программах, где один основной
поток подготавливает данные для других, вспомогательных потоков. При готовности
нового набора данных основной поток устанавливает событие, по которому освобожда-
ется один вспомогательный поток. Остальные вспомогательные потоки продолжают
ожидать подготовки новых данных.
Наряду с выполнением операций установки и сброса события можно сгенериро-
вать импульсное событие:
BOOL PulseEvent( hEvent ) ;
Импульсное событие включает сигнал на короткий промежуток времени. Приме-
нение этой функции для события, сбрасываемого вручную, позволяет оповестить о нем
все ожидающие потоки, а затем сбросить событие. Вызов функции для события, сбрасы-
ваемого автоматически, дает возможность оповестить только один ожидающий поток.
Если не было ни одного ожидающего потока, то никакой другой поток не будет опове-
щен. С другой стороны, установка автоматического события позволит оставить сигнал
включенным до тех пор, пока не появится ожидающий его поток. После оповещения по-
тока событие сбрасывается автоматически.
Семафоры, исключающие семафоры и события могут совместно использоваться
несколькими процессами, которые необязательно должны быть связаны друг с другом.
Путем совместного задействования синхронизирующих объектов процессы могут коор-
динировать свои действия по аналогии с тем, как это делают потоки. Существует три
механизма совместного использования. Первый из них - это наследование, при котором
один процесс создает новый процесс, получающий копии всех дескрипторов родитель-
ского процесса. Копируются только те дескрипторы, которые при создании были поме-
чены как доступные для наследования.
Два других метода сводятся к созданию второго дескриптора существующего объ-
екта с помощью вызова функций. Какая из функций будет вызвана, зависит от имею-
щейся информации. При наличии дескрипторов как исходного процесса, так и процесса,
назначения следует вызывать функцию DuplicateHandle, при наличии только имени объ-
74
Страницы
- « первая
- ‹ предыдущая
- …
- 70
- 71
- 72
- 73
- 74
- …
- следующая ›
- последняя »
