Als Erstes mußt/solltest du also deine blockierende Lesevariante in eine Nichtblockierende umwandeln.
Da das Lesen schon in einem eigenen Thread läuft, wird der Hauptthread (sofern keine "Synchronize"-Fehler gemacht werden) nicht blockiert.
Delphi-Quellcode:
procedure TClientReadThread.Execute;
var
Test: AnsiString;
begin
while not terminated
do begin
try
DebugOut('
Blockierendes Read ab jetzt...');
Test := ParentThread.tcpclient.IOHandler.ReadString(10, TEncoding.ANSI);
// <--- Problem
DebugOut('
Test: '+Test);
except
on E:
Exception do begin
if ParentThread.tcpclient.Connected
then DebugOut('
TReadThread.Execute: '+E.
Message);
end;
end;
end;
end;
Die markierte Zeile muss nur sicherheitshalber auf eine im Thread enthaltene
TCP Client Komponente zugreifen anstatt auf eine "globalere".