Hallo,
ich habe hier ein merkwürdiges Problem beim Lesen von Daten an seriellen Ports. Mit SetupComm() habe ich die Input-Queue auf 4096 Bytes eingestellt und trotzdem gehen schon beim Lesen von weniger als 1000 Bytes (die in mehreren kleineren Blöcken gesendet werden) einige Daten verloren, wenn ich die Daten nicht alle umgehend lese. Ich musste dazu "ReadTotalTimeoutConstant" beim Aufruf von SetCommTimeouts sehr hoch setzten (250) und in einer Schleife so lange lesen, bis ReadFile mit 0 gelesenen Bytes zurückkehrte, damit das in meinem Testfall funktionierte. Dieses Verhalten ist sowohl an COM1 als auch an COM2 absolut reproduzierbar. ReadIntervalTimeout und ReadTotalTimeoutMultiplier habe ich auf MAXDWORD gesetzt. Baudrate ist 9600 baud.
Laut Dokumentation von SetupComm() kann der Treiber diese Angabe ignorieren, sollte dann aber sicherstellen, dass ein Datenverlust durch Pufferüberlauf höchstens unter extremen Umständen auftritt, die hier aber wirklich nicht vorlagen (etwa 600 Bytes und ein Zeitraum von etwa 700 ms). Wie puffert der Treiber für die serielle Schnittstelle die Daten? Muss ich da auf irgend etwas aufpassen?