我有一个 Qt 应用程序,它通过串口与加密狗通信(它是一个 FTDI 芯片)。我轮询 QSerialPortInfo::availablePorts()
以检测何时添加或删除端口,然后向加密狗发送一个空行以识别它(我的加密狗用它的 ID 对此做出响应,我指望它对 99% 的其他设备无害)。
一切正常,除了如果您在连接处于事件状态时移除加密狗,连接似乎没有关闭并且端口仍在 QSerialPortInfo::中返回availablePorts()
.
有谁知道在我连接到串行加密狗时如何检测它的移除(除了像 ping 之类的黑客攻击)。
我试过监听 QSerialPort
发出的所有信号(error()
、readChannelFinished()
等),但没有一个当您拔出加密狗时,它们会发出。顺便说一句,这是在 Windows 7 上。
最佳答案
我在 Qt 5.4.1 上看到了同样的问题,但只出现在 Windows 7 上。在 Windows 8 上检测到加密狗被移除。
其实是windows 7本身的问题。如果您检查设备管理器,您会注意到 COM 端口保留在列表中,如果它已经打开,即使在加密狗被移除的情况下也是如此。
关于c++ - 检测移除打开的串口设备(Qt/Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25302150/