В настоящее время у меня возникают проблемы с методом 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 / последовательной связи, поэтому, пожалуйста, извините словарь.