c++ - 为什么我的热插拔 HID 设备应用程序在每次连接时变得越来越慢?

标签 c++ qt device handle hid

我正在使用 native Windows 代码来枚举 HID 设备列表并根据硬件 ID 设置连接。我在 Qt 应用程序中使用的 DLL 中执行此操作。我连接、写入和读取数据都没有问题。当我关闭设备时,我希望我的应用程序自动重新连接到该设备或共享相同硬件 ID 的另一台设备;但是,在每个后续连接上,它都会减慢 Qt GUI 的速度。例如,标签之间的切换明显延迟。

这让我相信我可能没有正确断开与 HID 设备的连接,或者存在某种内存泄漏。如果我重新启动应用程序,再次连接到设备,然后 GUI 将正常运行。

目前,如果出现故障我会在阅读报告时通过关闭句柄来触发“断开连接”过程,但这也许还不够?有没有一种方法可以在某种意义上“清理历史”,以便在不降低数据速度的情况下重新连接到设备?

这是我关闭 I/O 句柄和事件句柄的代码:

char* HID::ReadReport() 
{
        DWORD BytesRead;
        InputReportBuffer[0] = REPORT_ID;
        BOOL Result = ReadFile(IOHandle, InputReportBuffer, Capabilities.InputReportByteLength, &BytesRead, (LPOVERLAPPED)&HIDOverlapped);
        if (Result)
        {

        }
        else
        {

        }
    return InputReportBuffer;
}

最佳答案

问题与 Qt 相关。多次调用与 ReadReport 函数相关的 QTimer 连接设置,导致后续连接尝试速度变慢。

关于c++ - 为什么我的热插拔 HID 设备应用程序在每次连接时变得越来越慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351821/

相关文章:

C++ 将字符串转换为整数;得到奇怪的输出?

c++ - 双指针和它们之间的括号

c++ - 如何使用 LLVM 为不同的目标架构编译程序?

android - 当设备的(android)键盘处于 Activity 状态时移动弹出窗口

linux - 用不同的语言运行 Qt 应用程序?

Android:升级后手机无法被 ADT 识别

c++ - 带有 C++ 模板的 SWIG : undefined symbol

c++ - 调整 QTableWidget 中列的大小

swift - Xcode App仅在设备上崩溃-EXC_CRASH(SIGABRT)

device - Power8可以使用原子操作与通过PCI Express连接的ASIC/FPGA进行通信吗?