gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:25:03 25 4
gpt4 key购买 nike

我有一个应用程序,其中通过虚拟 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com