我正在使用本机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;
}
答案 0 :(得分:0)
问题与Qt有关。与ReadReport函数相关的QTimer连接设置被多次调用,导致随后的连接尝试变慢。