Здравствуйте, Mag, Вы писали:
Mag>Помогите с чтением из com-порта. Вот тривиальная задача. Mag>Создаётся отдельный поток. Он выполняет следующие действия. Mag>1. Открыть com-порт (CreateFile... — здесь всё просто). Mag>2. Настроили порт, как надо (тут тоже не проблема).
Mag>Цикл: Mag>3. Организуем ожидание события принятия байта из com-порта. Вот тут ключевая проблема. Должно быть что-то с WaitForSingleObject, WaitCommEvent или что-то ещё. Mag>4. По принятию байта помещаем его в массив.
Mag>5. Закрываем com-порт.
Mag>Хитрость задачи состоит в том, что количество принимаемых байт не определено. Т.е. процесс приёма непрерывен: есть что-то — принимаем. Может есть у кого реально работающий кусок кода, реализующий поставленную задачу. Буду премного благодарен.
Простите, а в чем все таки проблема? Количество байт неопределено, но у Вас есть настраиваемый параметр сомм-порта ReadIntervalTimeout. Как только он истек, процедура чтения завершена. Параметр сколько байт надо прочитать из порта в функции ReadFile пусть будет большим, например размер буфера приемника. По окончании таймаута все что принято — все Ваше. Обработайте и возвращайтесь к ожиданию события приема символа и так бесконечно. А порт можно закрывать когда завершится поток чтения.
Второй вариант: как только случилось EV_RXCHAR вызовите ClearCommError и прочтите сколько байт уже поступило во "внутренний буфер" сомм-порта. Вызовите ReafFile с полученным параметром.