Forum: PC-Programmierung Frage zu ReadFile() overlapped


von Peter (Gast)


Lesenswert?

Hallo,

ich versuche mit ReadFile() Daten auszulesen. Funktioniert eigentlich 
auch ganz gut.
Was mich etwas stört: Wenn ich zuviele Daten anfrage, hänge ich immer in 
GetOverlappedResultEx() für die entsprechenden Millisekunden fest. Ich 
gehe dann auf 1 Byte zurück und lese solange bis nichts mehr kommt. Das 
Ganze ist etwas umständlich.

Kann man nicht irgendwie abfragen, wieviele Daten abholbereit sind? Oder 
gibt es dafür einen anderen Ansatz das Ganze möglichst schnell zu 
implementieren?

Danke, Peter

von Hans Ulli K. (Gast)


Lesenswert?

Unter Linux gibt es die AsyncIO Funktionen.

Und was heißt hier schnell ...
Übertragungsgeschwindigkeit oder Latenz ??

von Peter II (Gast)


Lesenswert?

was hast du bei GetOverlappedResultEx als Timeout angeben?

Neugier: Für was brauchst du das?

von Clemens L. (c_l)


Lesenswert?

Peter II schrieb:
> Neugier: Für was brauchst du das?

Dazu braucht es keine Neugier; das Verhalten von ReadFile() ist 
natürlich davon abhängig, von welchem Gerät (mit welchem Treiber) 
gelesen wird. Ohne diese Informationen ist diese Frage unbeantwortbar.

von Peter II (Gast)


Lesenswert?

Clemens L. schrieb:
> Dazu braucht es keine Neugier; das Verhalten von ReadFile() ist
> natürlich davon abhängig, von welchem Gerät (mit welchem Treiber)
> gelesen wird. Ohne diese Informationen ist diese Frage unbeantwortbar.

er hängt aber nicht ein ReadFile fest, sondern in 
GetOverlappedResultEx() und da steht in der Doku das es bei passenden 
Parametern sofort zurückkehrt.

von Clemens L. (c_l)


Lesenswert?

Ohne Timeout sagt GetOverlappedResultEx() dann einfach, dass ReadFile() 
noch nicht fertig ist. Das eigentliche Problem ist anscheinend, das 
Timeout von ReadFile() zu verringern.

von Peter (Gast)


Lesenswert?

Es geht darum die Latenz zu minimieren.

Das eigentliche Projekt ist natürlich streng geheim, weshalb ich da auch 
nichts näheres dazu sagen kann.

Ich denke, eine gute Lösung ist, bei jedem Timeout die angefragte Menge 
zu halbieren bis ich dann bei 1 angekommen bin.
Dann solange jedes Byte einzeln einzulesen, bis wieder ein Timeout 
kommt. Danach dann wieder die 'volle' Datenrate versuchen. Und schon 
gehts von vorne los.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.