Я работаю в модуле для моего приложения, чтобы читать его с устройства считывания штрих-кода HID.CancelIO последний раз за минуту при удалении HID-устройства
Это приложение Windows (протестировано в Windows 10), и я использую Visual C++.
Чтобы прочитать, я получаю путь к устройству и звоню ReadFile
с FILE_FLAG_OVERLAPPED
, а затем используйте WaitForMultipleObjects
, чтобы дождаться лекции. Если я хочу закрыть приложение или пользователь выбирает другое устройство, я запускаю второе событие для отмены и звонящего CancelIO
.
До сих пор так хорошо ... все работает отлично.
Теперь я хочу определить, удаляет ли пользователь выбранное HID-устройство ... Я зарегистрирую окно и поймаю событие DeviceChange
. Также работайте хорошо .... но когда я отменяю чтение курса и звоню CancelIO
, эта функция занимает более минуты, чтобы вернуться. Я старался не звонить CancelIO
в этом случае (удаление устройства) и может удалить устройство и подключить его снова, и он работает ... но когда я закрываю приложение, то для потока требуется более минуты (поток в заряд чтения) до конца. Поэтому я предполагаю, что приложение пытается отменить чтение устройства.
Так что мой вопрос: что делать, когда я обнаруживаю устройство, которое я читаю, удаляется ???
Заранее спасибо.
Hi Codeguard. Спасибо за ваши комментарии ... 1) Это тот же самый поток, что и call CancelIO. Поток останавливается в ожидании чтения ... тогда, когда устройство отключается, поток пользовательского интерфейса уведомляет об этом потоке, который запускает событие отмены, разблокируя поток чтения и вызывая CancelIO. Возможно, CancelIO не требуется в этом сценарии (не мог найти никакой информации об этом), но затем, когда поток завершен (Join), он длится более 1 минуты. Если я назову CancelIO, эта минута теряется в CancelIO, а не при завершении темы. –
2) Как я уже сказал, возможно, никакой CancelIO не требуется, когда пользователь удаляет устройство. Но блокировка происходит тогда, когда заканчивается нить. Даже если я снова добавлю это устройство и работаю с ним. –
3) При шуминге долгое время теряется в Join. Это не мой код. –