Функции для работы с объектом Событие


Часто бывает нужно, чтобы поток был готов к выполнению на протяжении всего времени работы процесса, но приводился в действие (выполнялся) только при необходимости. Если этот вторичный поток мог бы обрабатывать сообщения, то ему можно было посылать определенное в программе сообщение, а он бы выполнял свои действия только после его получения. Но

  • Чаще всего вторичные потоки не могут обрабатывать сообщения, так как не создают окон. Это идеальный случай для применения объекта Событие (event object).События - самая примитивная разновидность объектов ядра. Они содержат счетчик числа пользователей (как и все объекты ядра) и две булевы переменные: одна сообщает тип данного объекта-события, другая — его состояние (свободен или занят).

Объект событие может быть либо установленным (свободным), либо сброшенным (занятым). Объект событие можно создать с помощью функции:

HANDLE event=CreateEvent(NULL,fManual,fInitial,szName);

· Первый параметр (указатель на структуру типа SECURITY_ATTRIBUTES) и последний параметр (имя объекта событие) имеют смысл только в том случае, когда объект событие разделяется между процессами. В случае с одним процессом эти параметры обычно имеют значение NULL.


· Если параметр fManual при вызове функции CreateEvent имеет значение FALSE, то объект событие автоматически будет становиться сброшенным, когда осуществляется возврат из функции WaitForSingleObject. Если fManual равно TRUE, то при необходимости приложение должно самостоятельно сбрасывать его при помощи функции ResetEvent.


· Следует установить значение параметра fInitial равным TRUE, если необходимо, чтобы объект событие был изначально установленным, или равным FALSE, чтобы он был сброшенным.

Для того чтобы сделать уже существующий объект событие установленным, используется функция:

SetEvent(event);

Чтобы сделать объект событие сброшенным, следует вызвать функцию:

ResetEvent(event);

Для проверки того, установлено ли событие, функция потока обычно вызывает функцию WaitForSingleObjectсо вторым параметром, равным INFINITY:

WaitForSingleObject(event,INFINITY);
  • Возврат из функции WaitForSingleObject происходит немедленно, если объект событие в настоящее время установлен. В противном случае поток будет приостановлен в функции до тех пор, пока объект событие не станет установленным.


  • Можно установить максимальное значение периода ожидания, задав его величину в миллисекундах. Тогда возврат из функцииWaitForSingleObject произойдет, когда объект событие станет свободным или если истечет время ожидания.

Замечание.Напомним, что если параметр fManual при вызове функции CreateEvent имеет значение FALSE, то объект событие автоматически становится занятым, когда осуществляется возврат из функции WaitForSingleObject. Эта особенность позволяет избежать использования функции ResetEvent.



Дата добавления: 2017-01-26; просмотров: 1119;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.