Разговоров на эту тему было достаточно, но поиск ни к чему хорошему не привел.
Вопрос предельно ясный: меня очень интересует, как надо заполнить структуру COMMTIMEOUTS.
Нужно, чтобы:
1) при приеме ждал 3-5 сек (не бесконечно, чтобы не блокировал работу),
1.1 если данные не поступают, то ReadFile выходит из ожидания.
1.2 если данные начали поступать (пускай даже осталось ожидать 0.5 секунды),
то чтобы принял все байты, которые придут (интервал между ними 50мс). Число
ожидаемых байт точно не известно, но от 4 до 160. Интервал между сообщениями
200 мс.
2) при передачи интервал между байтами временной интервал 50мс.
typedef struct _COMMTIMEOUTS {
DWORD ReadIntervalTimeout;
DWORD ReadTotalTimeoutMultiplier;
DWORD ReadTotalTimeoutConstant;
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
} COMMTIMEOUTS,
*LPCOMMTIMEOUTS;
Мой вариант, который работает не так, как я от него ожидаю
COMMTIMEOUTS cto; // структура с таймаутами записи и чтения
memset(&cto,0,sizeof(cto));
cto.ReadIntervalTimeout=50; //между символами
cto.ReadTotalTimeoutConstant=3000; //Ждать максимум 3 секунды
cto.WriteTotalTimeoutMultiplier=50;
if (!::SetCommTimeouts(m_hComDev,&cto)) return false;
return true;
Может кто-нибудь подскажет, в чем я ошибся?