При разговоре с USB-устройством иногда зависает WriteFile - PullRequest
1 голос
/ 18 августа 2011

Я пишу утилиту для Windows, которая связывается с USB-устройством.Драйвер является специальным драйвером, поставляемым Analog Devices (производителем чипа контроллера, используемого в устройстве).

Я адаптировал одно из их примеров приложений Windows для связи с устройством.Связь осуществляется через именованные каналы и может быть синхронной или асинхронной.Проблема, которую я обнаружил во время тестирования, заключается в том, что вызовы API-функции WriteFile могут иногда не возвращаться, если устройство выключено во время записи (устройство имеет жесткий выключатель питания).То же самое наблюдается при использовании асинхронных или синхронизирующих вызовов - я не вижу времени ожидания при использовании aysnc.

После того, как это произошло, мне нужно перезапустить приложение, так как поток, связанный с USB-связью, завис.

Есть ли способ предотвратить возврат файла WriteFile в этом случае?

Спасибо, Том Дэвис.

1 Ответ

0 голосов
/ 19 августа 2011

Вы можете отменить операции ввода-вывода , используя CancelSynchronousIo и CancelIoEx .Вы можете сделать это, если обнаружите, что ваш поток сообщений неожиданно блокируется во время записи.

Возможные прерыватели сделки:

  • Доступно только в Windows Vista и новее
  • Драйвердолжен поддерживать отмену
...