Страница 70 из 238
CEvent
Объект класса
CEvent представляет собой объект синхронизации, позволяющий одному потоку послать сообщение другому потоку о наступлении некоторого события. Например, о завершении работы потока или о необходимости получить или передать очередную порцию информации. Различают два вида объектов класса
CEvent: одни из них устанавливаются и сбрасываются вручную, а другие - автоматически. Для ручной установки объекта события используется функция
SetEvent, а для ручного сброса - функция
ResetEvent. Автоматические объекты данного класса сбрасываются в том случае, если будет освобожден по крайней мере один поток. При создании объекта события для него может быть задано имя и поток, которому он принадлежит. После создания данного объекта он отмечается функцией
SetEvent. После завершения работы с ресурсом его необходимо освободить вызовом функции
Unlock. Другим способом работы с объектом события является создание члена класса, имеющего тип
CEvent. При создании объекта контролируемого класса для этой переменной вызывается конструктор класса
CEvent, определяющий тип создаваемого объекта, его исходное состояние, имя (если этот объект события будет использоваться в других процессах) и требуемые атрибуты безопасности. Для получения доступа к объекту, контролируемому переменной типа
CEvent, необходимо сначала создать объект класса
CSingleLock или
CMultiLock. Вызов функции
Lock данного объекта обеспечит монопольный доступ к контролируемому ресурсу. Если ресурс в данное время занят, данная функция будет ждать его освобождения в течение указанного промежутка времени. Если ресурс не освободится в течение периода ожидания, данная функция возвратит соответствующее значение. После завершения работы с ресурсом его необходимо освободить вызовом функции
Unlock. Описание данного класса содержится в файле заголовка afxmt.h.