Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
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 с.) |