我有一个应用程序,其中串行I/O通过虚拟COM端口使用附加的USB设备进行。当检测到设备的惊喜去除时,停止串行I/O的最佳方法是什么。我应该简单地关闭端口吗?或者,是否应该有一个全局变量来表示设备的存在,应在尝试传输/接收数据之前在每个串行I/O函数中检查一下?或者,应该是两者的组合,还是其他东西?谢谢。

有帮助吗?

解决方案

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

我有一个基本对象,在该对象中我得出了一个comport对象(以及许多其他通信对象)。 comport对象创建一个txthread和rxthread类。这些线程正在等待“重叠”,以表明读取或写入操作完成了 WaitForMultipleObjects().

如果没有什么可做的事情,则TxThreads将入睡,并通过TXWRITE函数唤醒(主过程和线程之间的数据通过TRHEAD SAFE SAFE FIFO缓冲区)。

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

要检测USB端口是否已连接/断开网络,我会收听Windows消息 DEVICE_CHANGE. 。如果端口断开连接,我将设置事件,并等待线程在端口删除之前退出并关闭端口。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top