检测是否删除了打开的串行端口设备(Qt / Windows)

时间:2014-08-14 07:15:30

标签: c++ windows qt serial-port

我有一个Qt应用程序,通过串口(它是FTDI芯片)与加密狗通信。我轮询QSerialPortInfo::availablePorts()以检测添加或删除端口的时间,然后向加密狗发送一个空白行以识别它(我的加密狗用它的ID响应这个,我对它的依赖是无害的99%其他设备)。

这一切正常,除了,如果在连接处于活动状态时删除加密狗,似乎连接没有关闭,端口仍然在{{1}中返回}。

有人知道如何在我连接时检测串行加密狗的删除(除了像ping它之类的黑客攻击)。

我已尝试收听QSerialPortInfo::availablePorts()发出的所有信号(QSerialPorterror()等),但当您将加密狗拉出时,不会发出任何信号。顺便说一句,这是在Windows 7上。

1 个答案:

答案 0 :(得分:1)

我在Qt 5.4.1中看到了同样的问题,但仅在Windows 7上。在Windows 8上,检测到了加密狗的删除。

实际上是Windows 7本身存在的问题。如果您使用设备管理器进行检查,您可以注意到COM端口仍保留在列表中,即使在已删除加密狗的情况下它仍处于打开状态。