Я предполагаю, что вы используете Windows.Это зависит от того, как вы спроектировали свой коммуникационный поток.
У меня есть объект BasePort, где я получил объект COMPort (и многие другие коммуникационные объекты).Объект COMPort создает один класс TXThread и RXThread.Эти потоки ожидают, пока «OVERLAP» покажет, что операция чтения или записи завершилась с WaitForMultipleObjects()
.
. TXThreads переходит в спящий режим, если ничего не нужно делать, и активируется функцией TXWrite (данныемежду основным процессом и потоком проходит через FIFO-буфер, безопасный для межсетевого интерфейса).
В этом случае им также нужно дождаться сигнала события о том, что порт закрыт, поэтому они фактически могут отменить любые ожидающие операции и выйти (наступает и удаляется).
Чтобы определить, подключен ли USB-порт или нет, я слушаю сообщение Windows DEVICE_CHANGE
.Если порт отключен, я устанавливаю событие и ожидаю выхода потоков, прежде чем класс Port удалит и закроет порт.
Я считаю этот подход очень надежным и безопасным.Это ядро коммуникационной платформы, которую я разработал более 8 лет назад и до сих пор работаю.