Bei synchronize; wird ja der Hauptthread solange angehalten, bis die damit aufgerufene Funktion beendet ist ... ich vermute einfach mal, daß nun die "vielen" Threads einfach zuschnell den Hauptthread sperren, so das dieser keine Chance bekommt irgendwas abzuarbeiten.
Versuch mal Forlgendes:
Delphi-Quellcode:
procedure tmythread.Execute;
begin
tcount:=1;
repeat
synchronize(display);
sleep(100); // ein bissl Zeit für'n Hauptthread
inc(tcount);
until tcount>300;
end;
und bei "echt" vielen Thread muß (wenn's klapt) die Zeit aber vergrößert werden, da sie sich ja im Durchschnitt aufteilt ... also bei 50 Threads bleiben (100 / 50 = 2) ja wiederum nur noch durschschnittlich 2 ms Zeit, in denen der Hauptthread was machen kann.