Ich verstehe was du meinst aber wenn ich vorher den InputBuffer auf <> Empty abfrage, dann bleibt mein Thread mit dem ReadLn nur bis zum nächsten gelesen Terminator hängen. Richtig?
Ja, schon, aber wenn keine Daten mehr kommen, wartet die Funktion einfach weiter. Wenn du das Programm dann beenden möchtest, kannst du den Lesevorgang nicht sauber beenden.
Auf welchen Wert sollte man das Timeout denn setzen? Erfahrungen?
Das kommt auf die Größe der Pakete an und wie lange es dauern darf, bis der Thread sich auf Anforderung beendet. Ich nehme meistens 100 bis 500 Millisekunden, weil das die Verzögerung gering genug hält, dass niemand beim Beenden bewusst warten muss, andererseits aber auch nicht zu oft versucht wird zu lesen.
Was passiert, wenn Timeout abläuft und er nicht bis zum Terminator gelesen hat? Bekomme ich dann wieder nur ein Teilstring von meinem Telegramm?
Das kannst du ja leicht testen. Soweit ich mich erinnere, wird der schon angekommene Teil nicht zurückgeliefert, sprich du bekommst einen Leerstring und beim nächsten Aufruf alles. Du kannst aber prüfen, ob ein Timeout aufgetreten ist, indem du ReadLnTimedOut abfragst.