为什么我的热插拔HID设备应用程序的每次连接速度越来越慢?

时间:2019-05-29 01:06:38

标签: c++ qt device handle hid

我正在使用本机Windows代码枚举HID设备列表,并基于硬件ID建立连接。我正在Qt应用程序中使用的DLL中执行此操作。连接,写入和读取数据都没有问题。当我关闭设备时,我希望我的应用自动重新连接到该设备或共享相同硬件ID的其他设备;但是,在随后的每个连接上,它都会降低Qt GUI的速度。例如,制表符之间的切换明显延迟。

这使我相信,也许我没有正确地从HID设备断开连接,或者存在某种内存泄漏。如果我重新启动应用程序,请再次连接到设备,然后GUI会正常运行。

目前,在读取报告时如果出现故障,我会通过关闭手柄来触发“断开连接”过程,但这可能还不够吗?从某种意义上说,有什么办法可以使我“清理板岩”,从而在不降低数据传输速度的情况下重新连接到设备?

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

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

        }
        else
        {
            connected = 1;
            InputReportBuffer[1] = 1;
            CloseHandle(IOHandle);
            CloseHandle(hEventObject);
        }
    }
    return InputReportBuffer;
}

1 个答案:

答案 0 :(得分:0)

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