Основы программирования в Win32API. Марапулец Ю.В. - 33 стр.

UptoLike

Составители: 

Параметр bManualReset функции CreateEvent() позволяет создать событие,
сбрасываемое не вручную, а автоматически. Автоматически сбрасываемое со-
бытие переходит в несигнальное состояние сразу же после выполнения функции
SetEvent(). Для таких событий функция ResetEvent() является избыточной. Кро-
ме того, перед автоматическим сбросом по каждому сигналу событие освобож-
дает только один поток. Автоматически сбрасываемые события целесообразно
применять в таких программах, где один основной поток подготавливает дан-
ные для других, вспомогательных потоков. При готовности нового набора дан-
ных основной поток устанавливает событие, по которому освобождается один
вспомогательный поток. Остальные вспомогательные потоки продолжают ожи-
дать подготовки новых данных.
Наряду с выполнением операций установки и сброса события можно сге-
нерировать импульсное событие:
BOOL PulseEvent(hEvent);…
Импульсное событие включает сигнал на короткий промежуток времени.
Применение этой функции для события, сбрасываемого вручную, позволяет
оповестить о нем все ожидающие потоки, а затем сбросить событие. Вызов
функции для события, сбрасываемого автоматически, дает возможность опо-
вестить только один ожидающий поток. Если не было ни одного ожидающего
потока, то никакой другой поток не будет оповещен. С другой стороны, уста-
новка автоматического события позволит оставить сигнал включенным до тех
пор, пока не появится ожидающий его поток. После оповещения потока собы-
тие сбрасывается автоматически.
2.4.4. Совместное использование семафоров,
исключающих семафоров и событий
Семафоры, исключающие семафоры и события могут совместно использо-
ваться несколькими процессами, которые необязательно должны быть связаны
друг с другом. Путем совместного задействования синхронизирующих объектов
процессы могут координировать свои действия по аналогии с тем, как это делают
потоки. Существуют три механизма совместного использования. Первыйэто на-
следование, при котором один процесс создает новый процесс, получающий копии
всех дескрипторов родительского процесса. Копируются только те дескрипторы,
которые при создании были помечены как доступные для наследования.
Два других метода сводятся к созданию второго дескриптора существую-
щего объекта с помощью вызова функций. Какая из функций будет вызвана,
зависит от имеющейся информации. При наличии дескрипторов как исходного
процесса, так и процесса назначения следует вызывать функцию DuplicateHan-
dle(), при наличии только имени объектаодну из функций Openxxx. Две про-
граммы могут заранее определить имя совместно используемого объекта.
Кроме того, одна из программ способна передать другой это имя посредством
совместно используемой области памяти функций DDEML (DDE Management
33
     Параметр bManualReset функции CreateEvent() позволяет создать событие,
сбрасываемое не вручную, а автоматически. Автоматически сбрасываемое со-
бытие переходит в несигнальное состояние сразу же после выполнения функции
SetEvent(). Для таких событий функция ResetEvent() является избыточной. Кро-
ме того, перед автоматическим сбросом по каждому сигналу событие освобож-
дает только один поток. Автоматически сбрасываемые события целесообразно
применять в таких программах, где один основной поток подготавливает дан-
ные для других, вспомогательных потоков. При готовности нового набора дан-
ных основной поток устанавливает событие, по которому освобождается один
вспомогательный поток. Остальные вспомогательные потоки продолжают ожи-
дать подготовки новых данных.
     Наряду с выполнением операций установки и сброса события можно сге-
нерировать импульсное событие:
BOOL PulseEvent(hEvent);…
     Импульсное событие включает сигнал на короткий промежуток времени.
Применение этой функции для события, сбрасываемого вручную, позволяет
оповестить о нем все ожидающие потоки, а затем сбросить событие. Вызов
функции для события, сбрасываемого автоматически, дает возможность опо-
вестить только один ожидающий поток. Если не было ни одного ожидающего
потока, то никакой другой поток не будет оповещен. С другой стороны, уста-
новка автоматического события позволит оставить сигнал включенным до тех
пор, пока не появится ожидающий его поток. После оповещения потока собы-
тие сбрасывается автоматически.


                2.4.4. Совместное использование семафоров,
                    исключающих семафоров и событий

      Семафоры, исключающие семафоры и события могут совместно использо-
ваться несколькими процессами, которые необязательно должны быть связаны
друг с другом. Путем совместного задействования синхронизирующих объектов
процессы могут координировать свои действия по аналогии с тем, как это делают
потоки. Существуют три механизма совместного использования. Первый – это на-
следование, при котором один процесс создает новый процесс, получающий копии
всех дескрипторов родительского процесса. Копируются только те дескрипторы,
которые при создании были помечены как доступные для наследования.
      Два других метода сводятся к созданию второго дескриптора существую-
щего объекта с помощью вызова функций. Какая из функций будет вызвана,
зависит от имеющейся информации. При наличии дескрипторов как исходного
процесса, так и процесса назначения следует вызывать функцию DuplicateHan-
dle(), при наличии только имени объекта – одну из функций Openxxx. Две про-
граммы могут заранее определить имя совместно используемого объекта.
Кроме того, одна из программ способна передать другой это имя посредством
совместно используемой области памяти функций DDEML (DDE Management

                                     33