Re[3]: Проблемы с COM-портом
От: gordienkos Россия  
Дата: 24.10.06 14:30
Оценка:
Здравствуйте, Lomion, Вы писали:

L>Здравствуйте, gordienkos, Вы писали:


G>>Реальные таймауты чтения записи задаются SetCommTimeout. И при некотором везении WaitForSingleObject никогда не вернет WAIT_TIMEOUT, при том, что новых данных в порту нет.


G>>IMHO:

G>>Если чтение в обработчике оконного сообщения, тогда непонятно что за ReadFile в бесконечном цикле.
G>>Если используете же треды -- то overlapped там нафиг не нужен.
L>Ну а если мне необходимо использовать таймауты???

L>А вообще, из-за чего такая фигня происходит???


Я далеко не гуру, и могу только предполагать.
Асинхронное чтение заканчивается либо когда полностью заполнен выделенный буфер, либо, когда данных нет или недостаточно, то по истечении таймаута, заданного в SetCommTimeout.
В первых двух циклах чтения данные поступают, заполняют трех-байтовый буфер, асинхронное чтение заканчивается до следующего запуска ReadFile.
В третий раз данные не приходят (задержка 1000 в отправителе), WaitForSingleObject возвращает WAIT_TIMEOUT и запускается новая операция чтения, при том что старая вероятно еще не закончена. И дальше начинается цирк...
А при увеличении задержки в WaitForSingleObject, операции чтения разносятся во времени и перестают накладываться друг на дгуга. Это и создает видимость правильной работы.
sergo
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.