Eine Ursache für das Einfrieren dürfte sein, dass die Anforderungen durch Synchronize mit höherer Priorität bearbeitet werden als sonstige Windowsnachrichten. Da bei 50 Threads die ständig Synchronize aufrufen eigentlich immer eine Anforderng vorliegt, werden Windowsnachrichten nicht mehr verarbeitet.
Auszug aus
Unit Forms:
Delphi-Quellcode:
procedure TApplication.Idle(const Msg: TMsg);
{...}
{$IFDEF MSWINDOWS}
if (GetCurrentThreadID = MainThreadID) and CheckSynchronize then
{$ENDIF}
{$IFDEF LINUX}
if (Libc.GetCurrentThreadID = MainThreadID) and CheckSynchronize then
{$ENDIF}
Done := False;
if Done then WaitMessage;
end;