为什么我的热插拔 HID 设备应用程序在每次连接时变得越来越慢?
Why is my hotplugging HID device app getting increasingly slower with each connection?
我正在使用本机 windows 代码来枚举 HID 设备列表并根据硬件 ID 设置连接。我在 Qt 应用程序中使用的 DLL 中执行此操作。我连接、写入和读取数据都没有问题。当我关闭设备时,我希望我的应用程序自动重新连接到该设备或共享相同硬件 ID 的另一台设备;但是,在每个后续连接上,它都会减慢 Qt GUI 的速度。例如,标签之间的切换明显延迟。
这让我相信我可能没有正确断开与 HID 设备的连接,或者存在某种内存泄漏。如果我重新启动应用程序,再次连接到设备,然后 GUI 将正常运行。
目前,如果出现故障,我会在阅读报告时通过关闭句柄来触发 "disconnect" 进程,但这可能还不够?有什么方法可以 "clean the slate" 在某种意义上让我重新连接到设备而不会降低数据速度?
这是我关闭 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 连接设置被多次调用,导致后续连接尝试速度变慢。
我正在使用本机 windows 代码来枚举 HID 设备列表并根据硬件 ID 设置连接。我在 Qt 应用程序中使用的 DLL 中执行此操作。我连接、写入和读取数据都没有问题。当我关闭设备时,我希望我的应用程序自动重新连接到该设备或共享相同硬件 ID 的另一台设备;但是,在每个后续连接上,它都会减慢 Qt GUI 的速度。例如,标签之间的切换明显延迟。
这让我相信我可能没有正确断开与 HID 设备的连接,或者存在某种内存泄漏。如果我重新启动应用程序,再次连接到设备,然后 GUI 将正常运行。
目前,如果出现故障,我会在阅读报告时通过关闭句柄来触发 "disconnect" 进程,但这可能还不够?有什么方法可以 "clean the slate" 在某种意义上让我重新连接到设备而不会降低数据速度?
这是我关闭 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 连接设置被多次调用,导致后续连接尝试速度变慢。