Программное прерывание последовательного ввода-вывода при удалении USB-устройства - C ++ - PullRequest
0 голосов
/ 02 декабря 2010

У меня есть приложение, в котором последовательный ввод-вывод осуществляется с подключенного USB-устройства через виртуальный COM-порт.При неожиданном удалении устройства, что будет лучшим способом остановить последовательный ввод / вывод.Должен ли я просто закрыть порт?Или же должна существовать глобальная переменная, которая поддерживается для указания наличия устройства, которая должна проверяться в каждой функции последовательного ввода-вывода перед попыткой передачи / приема данных?Или это должно быть сочетание двух или чего-то еще?Спасибо.

1 Ответ

1 голос
/ 02 декабря 2010

Я предполагаю, что вы используете Windows.Это зависит от того, как вы спроектировали свой коммуникационный поток.

У меня есть объект BasePort, где я получил объект COMPort (и многие другие коммуникационные объекты).Объект COMPort создает один класс TXThread и RXThread.Эти потоки ожидают, пока «OVERLAP» покажет, что операция чтения или записи завершилась с WaitForMultipleObjects().

. TXThreads переходит в спящий режим, если ничего не нужно делать, и активируется функцией TXWrite (данныемежду основным процессом и потоком проходит через FIFO-буфер, безопасный для межсетевого интерфейса).

В этом случае им также нужно дождаться сигнала события о том, что порт закрыт, поэтому они фактически могут отменить любые ожидающие операции и выйти (наступает и удаляется).

Чтобы определить, подключен ли USB-порт или нет, я слушаю сообщение Windows DEVICE_CHANGE.Если порт отключен, я устанавливаю событие и ожидаю выхода потоков, прежде чем класс Port удалит и закроет порт.

Я считаю этот подход очень надежным и безопасным.Это ядро ​​коммуникационной платформы, которую я разработал более 8 лет назад и до сих пор работаю.

...