Ich war eigentlich der Meinung, dass
Synchronize
anders funktioniert.
Denn der Thread läuft erst dann weiter, wenn die Procedere im Synchronize abgearbeitet wurde.
Delphi-Quellcode:
procedure FooThread.SyncProc;
begin
Sleep( 5000 );
end;
procedure TFooThread.Execute;
begin
while not Terminated do
begin
Synchronize( SyncProc );
end;
end;
procedure TFooMainForm.StartThread;
begin
with TFooThread.Create do
try
while not Terminated do
Sleep( 500 );
finally
Free;
end;
end;
Mit diesem Code bleibt nicht nur die Fensteranzeige stehen, sondern auch der Thread bleibt hängen, da keine Synchronisierung erfolgen kann, weil die Nachrichten vom Hauptthread nicht verarbeitet werden.
Aber es werden nicht unzählig viele Nachrichten geschickt, sondern nur eine und die wartet auf eine Reaktion aus dem Hauptthread.
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)