Метод CloseHandle для блокировки последовательного порта на неопределенное время при отключении устройства - PullRequest
2 голосов
/ 18 октября 2019

В настоящее время у меня возникают проблемы с методом CloseHandle, пытающимся закрыть виртуальный последовательный порт COM в C ++. Я использую методы CreateFile и WriteFile для отправки сообщений на мое устройство. Когда мое приложение закрывается, я вызываю метод CloseHandle в своем деструкторе класса. Все работает нормально, когда я правильно закрываю свое приложение.

Мое устройство подключено к ПК с помощью адаптера RJ45 - USB, который подключается к USB-порту моего компьютера. Затем я использую драйвер FTDI для связи через виртуальный последовательный COM-порт.

Проблема возникает, когда я отсоединяю кабель RJ45 от адаптера: в этом случае функция ReadFile правильно возвращает, что она не может связатьсяс устройством;затем я хочу закрыть свое приложение, вызвав метод CloseHandle. В этом случае метод CloseHandle блокируется на неопределенный срок, и мое приложение не закрывается. Однако, когда я снова подключаю кабель RJ45, метод CloseHandle завершается, и мое приложение может закрываться.

Что-то интересное, что у меня нет той же проблемы, когда я отключаю USB-порт напрямую:в этом случае метод CloseHandle работает нормально, и мое приложение закрывается.

Есть ли что-то в буфере связи, чтобы очистить в этом случае? (Я слышал о методе EscapeCommFunction с сигналом DTR или сигналом RTS, но я попробовал это безуспешно!) Почему в этом случае CloseHandle блокируется? И почему у меня не возникает та же проблема, когда я отсоединяю USB-кабель?

Я не специалист по USB / последовательной связи, поэтому, пожалуйста, извините словарь.

...