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

Why is my hotplugging HID device app getting increasingly slower with each connection?

本文关键字:连接 越来越 HID 热插拔 我的 应用 为什么      更新时间:2023-10-16

我正在使用本机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 连接设置被多次调用,导致后续连接尝试速度变慢。