PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Overlapped IO


PatkIllA
2010-02-06, 18:14:20
Ich lese/schreibe Daten von HID Geräten und verwende dabei overlapped IO in einer Schleife.
Die ReadFile function sagt mir ERROR_IO_PENDING und dann warte ich mit WaitForSingleObject auf ein Event und werte anschließend die Daten aus.

When man jetzt das Gerät rauszieht wird das Event ebenfalls gesetzt und ich werte ungültige Daten aus und merke erst danach beim nächsten ReadFile aufruf, dass ein Fehler aufgetreten ist.

Wie kann ich denn schon vorher erfahren, dass ein Fehler aufgetreten ist?

Sephiroth
2010-02-06, 18:27:25
Da scheint mir eher ein konzeptioneller Fehler vorzuliegen. Overlapped IO ist ja asynchron, d.h. du gibst den Vorgang in Auftrag und kannst direkt weitermachen, während das OS im Hintergrund den Vorgang bearbeitet. Wenn du eine Rückmeldung über den Erfolg willst, dann musst du einen Event-Handler angeben oder (besser) einen IO Completion Port (http://msdn.microsoft.com/en-us/library/aa365198%28VS.85%29.aspx) nutzen.

Du aber machst aus dem asyc. Prozess im Endeffekt wieder einen sync. Prozess, weil du in der Schleife wartest bis der Vorgang fertig ist. Sinn?

PatkIllA
2010-02-06, 18:31:42
Wie komme ich den sonst wieder aus dem ReadFile heraus, wenn ich nicht mehr lesen möchte?
Wo kann ich denn bei der Overlapped IO EventHandlern angeben?

Die IO Completion Ports kannte ich bislang noch gar nicht. Außerdem ist das in python und für die Sachen, die ich jetzt nutze gibt es schon passende Wrapper.