Aber ich muss nochmal fragen.
OnExecute
wird aufgerufen. Warum sehe ich dann wiederum keine Meldung;
auch wenn ich die Ausgabe ganz an den Anfgang setze:
Delphi-Quellcode:
Procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
Var
Data:
String;
Begin
ScrollLog('
OnExecute();');
Application.ProcessMessages;
Data:= AContext.Connection.Socket.ReadLn();
//<--- Das wartet ewig, bis da etwas kommt
Data:= Trim(Data);
// Sonder- und Leerzeichen entfernen
TThread.Synchronize(
nil,
// threadsicherer VCL-Zugriff
Procedure()
Begin
ScrollLog('
[Srv]: received:');
ScrollLog('
=> ' + Data);
End);
End;
Das OnExecute() wird von jedem IndyThread gerufen und zwar alle Nase lang, wenn du da nix machst, kommt der sofort wieder.
Und das macht jeder Thread pro Connection, egal ob da etwas auf der Leitung angekommen ist oder nicht.
Mit ReadLn legst du den schlafen, bis ReadLn etwas zurück liefert.
PS: mit
if AContext.Connection.Socket.Readable() then begin
kannst abfragen, ob da etwas zum lesen gibt.