Как почистить буфер COM-порта (C++, WIN32 API)?
От: sk_alex Россия  
Дата: 11.04.03 13:45
Оценка:
Подскажите, как почистить буфер COM-порта (C++, WIN32 API)?

Ситуация следующая:
Имеется некоторое устройство, подключаемое к компьютеру по COM-порту. Обмен между устройством и COM-портом производится пакетами по 4 байта: 4 байта посылаются в устройство, устройство через некоторое время отвечает тоже 4-мя байтами. Предположим устройство не успевает ответить и программа вываливается по таймауту — неудачная транзакция, генерируется исключение, обрабатываемое соответсвующим образом. Однако после этого устройство все же отвечает и в буфере COM-порта лежат некие данные. При посылке следующих 4-х байт программа вычитывает не то, что нужно, а то, что ответила железка на прошлую неудачную команду. Ну и т.д.

Выход — чистить буфер COM-порта перед каждой операцией. Вопрос: как это сделать?

Вариант, который мне приходит в голову, очень навороченный: выделять отдельную нитку, которая крутится в постоянном цикле WaitCommEvent -> Вычитывание данных в свой локальный буфер. После этого основная программа работает уже с локальным буфером нитки, а буфер COM-порта всегда пустой. Но больно уж замороченно получается. Попроще никак нельзя?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.