c++ - 移除 USB 设备时以编程方式中断串行 I/O - C++

标签 c++ usb serial-communication virtual-serial-port

我有一个应用程序,其中通过虚拟 COM 端口与连接的 USB 设备进行串行 I/O。当检测到设备意外移除时,停止串行 I/O 的最佳方法是什么。我应该简单地关闭端口吗?或者,是否应该有一个全局变量,它被维护以指示设备的存在,在尝试传输/接收数据之前应该在每个串行 I/O 函数中检查它?或者,它应该是两者的结合,还是别的什么?谢谢。

最佳答案

我假设您运行的是 Windows。 这取决于您如何设计通信流程。

我有一个 BasePort 对象,其中派生了一个 COMPort 对象(以及许多其他通信对象)。 COMPort 对象创建一个 TXThread 和 RXThread 类。这些线程正在等待“OVERLAP”以发出读取或写入操作已完成的信号 WaitForMultipleObjects()

如果无事可做,TXThreads 将进入休眠状态,并由 TXWrite 函数唤醒(主进程和线程之间的数据通过 trhead 安全 FIFO 缓冲区)。

在这种情况下,他们还需要等待端口已关闭的事件信号,因此他们实际上可以取消任何未决操作并退出(线程退出并被删除)。

为了检测 USB 端口是否已连接/断开,我监听了 Windows 消息 DEVICE_CHANGE。如果端口断开连接,我设置事件并等待线程退出,然后端口类删除并关闭端口。

我发现这种方法非常可靠和安全。它是我 8 多年前设计的通信平台的核心,至今仍在运行。

关于c++ - 移除 USB 设备时以编程方式中断串行 I/O - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4336871/

相关文章:

linux - 确定USB设备文件路径

c++ - 通过软件提高 IR 串行可靠性

python-2.7 - Raspberry pi 3 B+ 中的串行通信

c++ - cocos2dx错误: opengl version too old

c++ - 为什么这些 CRTP 模式中只有一个可以编译?

c++ - 将 vector <int> 保存到文件

c++ - 类图显示文本超出框的类?

python - 重新连接几次后,通过 USB 端口与 Python 的串行通信停止工作

c - 简单的中断处理/多线程程序?

Linux RFID 读取器 HID 设备与驱动程序不匹配