windows - Når du snakker til en USB-enhed, hænger WriteFile til tider

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver et Windows-værktøj, der kommunikerer til en USB-enhed. Driveren er en brugerdefineret driver, der leveres af Analog Devices (producenten af ​​den controller chip, der bruges i enheden).


Jeg har tilpasset et af deres eksempel Windows-apps til at kommunikere med enheden. Kommunikationen sker via navngivne pipes og kan være synkron eller asynkron. Det problem, jeg har fundet under testen, er, at opkald til WriteFile api-funktionen undertiden undlader at returneres, hvis enheden er slukket under en skrivning (enheden har en hard strømafbryder). Det samme er observeret ved at bruge async- eller synkroniseringsopkald - jeg ser ingen timeout, der sker, når du bruger aysnc.


Når dette er sket, skal jeg genstarte min app, da tråden, der beskæftiger sig med USB-kommunikation, er hængt.


Er der en måde, jeg kan forhindre, at WriteFile ikke kan vende tilbage i dette tilfælde?


Tak
Tom Davies.

Bedste reference


Du kan annullere IO-operationer ved at bruge CancelSynchronousIo og CancelIoEx. Du kan gøre dette, hvis du opdager, at din comm-tråd uventet blokerer under skrivning. [1] [2] [3]


Mulige afbrydere:



  • Kun tilgængelig i Windows Vista og nyere

  • Driveren skal understøtte annullering