|
|
||
5. События |
||
Событием называется оповещение о некотором выполненном действии. В программировании события используются для оповещения одного потока о том, что другой поток выполнил некоторое действие. Сама же задача оповещения одного потока о некотором действии, которое совершил другой поток, называется задачей условной синхронизации или иногда задачей оповещения. В операционных системах Windows события описываются объектами ядра Events. При этом различают два типа событий: Различие между этими типами событий заключается в том, что событие с ручным сбросом можно перевести в несигнальное состояние только посредством вызова функции ResetEvent, а событие с автоматическим сбросом переходит в несигнальное состояние как при помощи функции ResetEvent, так и при помощи функции ожидания. При этом отметим, что если события с автоматическим сбросом ждут несколько потоков, используя функцию WaitForSingleObject, то из состояния ожидания освобождается только один из этих потоков. Создаются события вызовом функции CreateEvent, которая имеет следующий прототип: Как и обычно, пока значение параметра lpsecurityAttributes будем устанавливать в null. Основную смысловую нагрузку в этой функции несут второй и третий параметры. Если значение параметра bManualReset равно true, то создается событие с ручным сбросом, в противном случае — с автоматическим сбросом. Если значение параметра binitiaistate равно true, то начальное состояние события является сигнальным, в противном случае — несигнальным. Параметр lpName задает имя события, которое позволяет обращаться к нему из потоков, выполняющихся в разных процессах. Этот параметр может быть равен null, тогда создается безымянное событие. В случае удачного завершения функция CreateEvent возвращает дескриптор события, а в случае неудачи — значение null. Если событие с заданным именем уже существует, то функция CreateEvent возвращает дескриптор этого события, а функция GetLastError, вызванная после функции Для перевода любого события в сигнальное состояние используется функция SetEvent, которая имеет следующий прототип: При успешном завершении эта функция возвращает ненулевое значение, а в случае неудачи — FALSE. |
||
|
||
5 |