hHandle: THandle; // дескриптор мьютекса 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

hHandle: THandle; // дескриптор мьютекса

Поиск

function ReleaseSemaphore(

hHandle: THandle; // дескриптор мьютекса

ReleaseCount: longint // приращение счетчика

LP: Pointer      // как правило, nil

): Boolean; 

4.4. События (Event)

Данные объекты синхронизации используются обычно не для доступа к данным, а для того, чтобы оповестить другие потоки о том, что некоторое действие завершено. Пусть, например, в некотором приложении один поток читает данные из файла в буфер памяти, а другие потоки их обрабатывают. В начале работы первый поток устанавливает объект «Cобытие» в несигнальное состояние. Остальные потоки выполнили вызов функции ожидания и находятся в приостановленном состоянии, ожидая наступления события. Как только буфер заполняется, первый поток сообщает об этом ОС, вызывая сигнализацию события, ОС активизирует потоки.

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

Для создания объекта «Событие» используется функция:

function CreateEvent( lpEventAttributes: PSecurityAttributes; //адрес                     //структуры атрибутов безопасности bManualReset, //определяет, будет ли событие отключаемым             //вручную (TRUE) или автоматически (FALSE) bInitialState: BOOL; // задает начальное состояние (если                  // TRUE то событие сигнализирует) lpName: PChar  // имя или NIL, если имя не требуется ):Thandle; stdcall; // возвращает дескриптор события

Параметр lpName позволяет разделять объекты между процессами. Как и в случае с мьютексами, если lpName совпадает с именем уже существующего объекта типа Event, созданного текущим или любым другим процессом, функция не создает нового объекта, а возвращает идентификатор уже существующего. При этом игнорируются параметры bManualReset, bInitialState и lpSecurityDescriptor.

Если объект используется для синхронизации внутри одного процесса, его можно объявить как глобальную переменную и создавать без имени. Имя объекта не должно совпадать с именем любого из существующих объектов синхронизации.

Если известно, что Event уже создан, для получения доступа к нему можно вместо CreateEvent воспользоваться функцией:



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 47; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.009 с.)