События обмена информацией


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

Процесс может осуществлять текущий контроль за события на данном коммуникационном ресурсе, используя функцию SetCommMask, которая создает маску события. Чтобы выяснить текущую маску события для коммуникационного ресурса, процесс может использовать функцию GetCommMask. Ниже перечислены значения, определяющие события, которые могут быть проверены.

Значение Предназначение
EV_BREAK Во время ввода данных было обнаружено прерывание.
EV_CTS Сигнал "готов к передаче" (CTS) предупреждает об изменении  состояния.
EV_DSR Сигнал готовности модема (DSR) предупреждает об изменении состояния.
EV_ERR Произошла ошибка состояния линии. Ошибками состояния линии являются CE_FRAME, CE_OVERRUN и CE_RXPARITY.
EV_RING Был обнаружен индикатор вызова.
EV_RLSD RLSD (детектор принимаемого линейного сигнала)  предупреждает об изменении состояния.
EV_RXCHAR Символ был принят и помещен в буфер ввода данных.
EV_RXFLAG Символ события был принят и помещен в буфер ввода данных. Символ события устанавливается в структуре DCB устройства, которое применяется в последовательном порте, используя функцию SetCommState.
EV_TXEMPTY Последний символ в буфере вывода данных был отправлен.

После того, как определяется множество событий, процесс использует функцию WaitCommEvent, чтобы ждать одно из совершившихся событий. WaitCommEvent может использоваться как синхронная или асинхронная операция. За дополнительной информацией о выполнении функции как асинхронной операции, см. главу Синхронизация.

Когда происходит одно из событий, определенных маской события, процесс завершает операцию ожидания и устанавливает переменную  маски события, чтобы обозначить тип обнаруженного события. Если функция SetCommMask вызывается для коммуникационного ресурса, в то время, когда состояние ожидание не закончилось для этого ресурса, WaitCommEvent возвращает ошибку.

Функция WaitCommEvent обнаруживает события, которые произошли начиная с последнего вызова функции SetCommMask или WaitCommEvent. Например, если Вы определяете событие EV_RXCHAR как событие, выполняющее ожидание, вызов WaitCommEvent должен удовлетворяться тогда, если  в буфере ввода данных драйвера есть символы, которые прибыли начиная с последнего вызова WaitCommEvent или SetCommMask. В соответствии с этим, данный ниже  псевдокод  удовлетворит любые символы, принятые между T1 и T2 следующим вызовом WaitCommEvent.

while (!bFinished) 
{ 
    WaitCommEvent(args)
 
T1: // Чтение байтов 
    // Обработка байтов 

T2: 
}

При текущем контроле события, которое происходит, когда сигнал (CTS, DSR и так далее) изменяет состояние, функция WaitCommEvent сообщает об изменении, но не о текущем состоянии. Чтобы сделать запрос текущего состояния сигналов CTS  (готов к передаче),  DSR (сигнал готовности модема),  RLSD (детектор принимаемого линейного сигнала) и индикатора вызова, процесс может использовать функцию GetCommModemStatus.

Назад в оглавление
На главную страницу

Hosted by uCoz