Dann führst du das ReceiveString aber auch innerhalb des Locks aus, obwohl es dafür gar keinen Grund gibt. Besser ist es, wenn du alles fertig machst und dann nur noch in dem abgesicherten Teil die Zielvariable schreibst.
Denn je länger du Threads blockierst, desto eher übersiehst du mögliche Deadlocks, sprich dass sich zwei Threads gegenseitig blockieren, weil beide auf den anderen warten (z.B. einer im TMonitor.Enter, der andere in einem Synchronize, jetzt nur als Beispiel). Die Gefahr besteht hier nicht, aber trotzdem sollte man in einem Lock, sprich hier zwischen Enter und Exit, so wenig Code wie möglich ausführen.
ah ok - Danke für die Info.
Also dann eher so:
Delphi-Quellcode:
procedure TMainForm.Thread_UDP_ReceiveString(var Text: String);
var
S: String;
begin
S := '';
If idUDPClient.Connected then
S := IdUDPClient.ReceiveString(-1, TEncoding.UTF8);
System.TMonitor.Enter(ClientThread);
try
Text := S;
finally
System.TMonitor.Exit(ClientThread);
end;
end;
mfg
Helmi
>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<