Почему мое приложение HID с горячим подключением становится все медленнее с каждым подключением? - PullRequest
1 голос
/ 29 мая 2019

Я использую собственный код 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;
}

1 Ответ

0 голосов
/ 08 июня 2019

Проблема была связана с Qt. Настройка соединения QTimer, связанная с функцией ReadReport, вызывалась несколько раз, что приводило к замедлению при последующих попытках соединения.

...