Ich verstehe das auch so, dass die
Indy-Antwort in einem Thread kommt und
Indy das kapselt.
Das ist richtig, die Implementierung (mit einem Thread auf der
Indy-Seite) ist aber für deine Fragestellung hier völlig belanglos.
Denn
Delphi-Quellcode:
// Der Befehl kehrt zurück, wenn gesendet wurde
IdTCPClient1.IOHandler.WriteLn('
@Now');
// Der Befehl kehrt zurück, wenn empfangen wurde
Gui.sNow := IdTCPClient1.IOHandler.ReadLn();
Wenn das Senden und Empfangen nun 5 Minuten dauert, dann ist dein UI auch 5 Minuten blockiert!
Um diese UI-Blockade zu vermeiden, musst du das zwangsläufig in einen eigenen Thread packen.
Auf der
Indy-Seite ist das (im Groben) so implementiert
Delphi-Quellcode:
procedure WriteLn;
var
LSendThread : TSendThread;
begin
LSendThread.Create;
try
LSendThread.WaitFor; // warten, bis der Thread fertig ist
finally
LSendThread.Free;
end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)