Я использую собственный код Windows для перечисления по списку устройств HID и установки соединения на основе идентификаторов оборудования. Я делаю это в DLL, которую я использую в приложении Qt. У меня нет проблем с подключением, записью и чтением данных. Когда я выключаю устройство, я хочу, чтобы мое приложение автоматически повторно подключалось к устройству или к другому устройству с одинаковыми идентификаторами оборудования; однако при каждом последующем соединении это замедляет графический интерфейс Qt. Например, переключение между вкладками заметно задерживается.
Это привело меня к мысли, что, возможно, я неправильно отключаюсь от устройства HID или что-то вроде утечки памяти. Если я перезапускаю приложение, снова подключаюсь к устройству, тогда графический интерфейс работает нормально.
В настоящее время при чтении отчета в случае сбоя я запускаю процесс «разъединения», закрывая дескрипторы, но, возможно, этого недостаточно? Есть ли способ в каком-то смысле «почистить планшет», чтобы я снова подключился к устройству без замедления передачи данных?
Вот мой код, где я закрываю дескриптор ввода-вывода и дескриптор события:
char* HID::ReadReport()
{
DWORD BytesRead;
InputReportBuffer[0] = REPORT_ID;
BOOL Result = ReadFile(IOHandle, InputReportBuffer, Capabilities.InputReportByteLength, &BytesRead, (LPOVERLAPPED)&HIDOverlapped);
if (Result)
{
}
else
{
}
return InputReportBuffer;
}