последовательный порт: ReadFile и CloseHandle

0

Я хочу читать входящие данные последовательного порта и обрабатывать их (Windows: native C++). Но у меня есть две проблемы:

1- Что мне следует добавить как nNumberOfBytesToRead в ReadFile:

ReadFile( hCom, buffer, nNumberOfBytesToRead, &read, NULL );

Если я поставлю 50 и 40 байт, ReadFile не вернется. Потому что ему нужно еще 10 байтов. Если я поставлю 1, мое приложение не будет оптимизировано. Какое лучшее число? Что мне делать?

2- Когда я хочу выйти из своего приложения, и если никакие данные не поступают через последовательный порт, ReadFile будет заблокирован без возврата. Поэтому я не могу закрыть его правильно, используя CloseHandle. Как я могу заставить ReadFile возвращаться, ожидая данные через последовательный порт?

Теги:
serial-port
readfile

2 ответа

1

Когда вы открываете порт, вы должны использовать SetCommTimeouts. Тайм-аут чтения подобен настройке задержки: как долго ReadFile должен ждать до возвращения, если входящие данные приостанавливаются. Размер вашего буфера и тайм-аут для количества миллисекунд, которые вы готовы подождать, прежде чем обрабатывать все, что он получил.

  • 0
    Да, другой жизнеспособный вариант - я забыл об этом.
1

1 - нет лучшего числа. Для чтения данных из порта лучше использовать другую стратегию ввода-вывода, например перекрытие ввода-вывода. Вот пример кода.

2 - В этом случае вы можете и должны закрыть его при вызове CloseHandle. Когда вы это сделаете, любые потоки, заблокированные на ReadFile или другой API блокировки, с помощью только что закрытого вами дескриптора, просыпаются, получая неудачный код результата.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню