Статьи Королевства Дельфи


Часть V - часть 9


Начнем с событий связаных с последовательными портами. Вы указываете системе осуществлять слежение за возникновением связанных с портом событий устанавливая маску с помощью функции BOOL SetCommMask( HANDLE hFile, DWORD dwEvtMask ); Маска отслеживаемых событий задается вторым параметром. Можно указывать любую комбинацию следующих значений:

  • EV_BREAK Состояние разрыва приемной линии
  • EV_CTS Изменение состояния линии CTS
  • EV_DSR Изменение состояния линии DSR
  • EV_ERR Ошибка обрамления, перебега или четности
  • EV_RING Входящий звонок на модем (сигнал на линии RI порта)
  • EV_RLSD Изменение состояния линии RLSD (DCD)
  • EV_RXCHAR Символ принят и помещен в приемный буфер
  • EV_RXFLAG Принят символ заданый полем EvtChar структуры DCB использованой для настройки режимов работы порта
  • EV_TXEMPTY Из буфера передачи передан последний символ
Если dwEvtMask равно нулю, то отслеживание событий запрещается. Разумеется всегда можно получить текущую маску отслеживаемых событий с помощью функции BOOL GetCommMask( HANDLE hFile, LPDWORD lpEvtMask );

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

  • EV_EVENT1 Устройство-зависимое событие
  • EV_EVENT2 Устройство-зависимое событие
  • EV_PERR Ошибка принтера
  • EV_RX80FULL Приемный буфер заполнен на 80 процентов
Эти дополнительные события используются внутри драйвера. Вы не должны переустанавливать состояние их отслеживания.

Когда маска отслеживаемых событий задана, Вы можете приостановить выполнение своей программы до наступления события. При этом программа не будет занимать процессор. Это выполняется вызовом функции BOOL WaitCommEvent( HANDLE hFile, LPDWORD lpEvtMask, LPOVERLAPPED lpOverlapped, );

Замечу, что в переменной, адресуемой вторым параметром, не будут устанавливаться внутренние события драйвера (перечислены в описании функции GetCommMask). В единичное состояние установятся только те биты, которые соответствуют реально произошедшим событиям.




Начало  Назад  Вперед



Книжный магазин