c++ - 检测移除打开的串口设备(Qt/Windows)

标签 c++ windows qt serial-port

我有一个 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/

相关文章:

c++ - QT请求 "QObject::connect: No such slot BackEnd::RequestReceived"

c++ - 我怎样才能在两点之间进行碰撞检查? (C++)

windows - 如何在 MinGW 中编译和使用 GLib

qt - 是否有任何 Qt SQLite 插件可以通过 VFS 将数据库存储在 RAM 中(用于从 Qt 资源文件加载数据库)?

c++ - QString 在 QVector 内存泄漏

c++ - const_cast 的奇怪行为

c++ - 使用 OpenMP 4.0 (gcc 4.8.4) 而不是 OpenMP 3.1 (gcc 4.9.2) 时速度会降低

windows - GnuTLS:无法使用 GIT_SSH_COMMAND 获取随机数据

c++ - WinINet API 可以在 Windows Server 操作系统上使用吗?

c++ - 在子尺寸更改后调整父窗口的大小