0

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

4

1 回答 1

1

我假设您正在运行 Windows。这取决于您如何设计沟通流程。

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

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

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

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

我发现这种方法非常可靠和安全。它是我在 8 多年前设计的通信平台的核心,并且仍在发挥作用。

于 2010-12-02T16:08:11.660 回答