我有一个Qt应用程序,通过串口(它是FTDI芯片)与加密狗通信。我轮询QSerialPortInfo::availablePorts()
以检测添加或删除端口的时间,然后向加密狗发送一个空白行以识别它(我的加密狗用它的ID响应这个,我对它的依赖是无害的99%其他设备)。
这一切正常,除了,如果在连接处于活动状态时删除加密狗,似乎连接没有关闭,端口仍然在{{1}中返回}。
有人知道如何在我连接时检测串行加密狗的删除(除了像ping它之类的黑客攻击)。
我已尝试收听QSerialPortInfo::availablePorts()
发出的所有信号(QSerialPort
,error()
等),但当您将加密狗拉出时,不会发出任何信号。顺便说一句,这是在Windows 7上。
答案 0 :(得分:1)
我在Qt 5.4.1中看到了同样的问题,但仅在Windows 7上。在Windows 8上,检测到了加密狗的删除。
实际上是Windows 7本身存在的问题。如果您使用设备管理器进行检查,您可以注意到COM端口仍保留在列表中,即使在已删除加密狗的情况下它仍处于打开状态。