Synchronize setzt eine Windows Message ab die dafür sorgt, dass die Methode aus dem VCL Thread heraus aufgerufen wird. Und durch die Messages wird dafür gesorgt, dass sie schön nacheinander aufgerufen werden. Sofern dort nich irgendwer händisch ein Application.ProcessMessages aufruft.
So auf die Schnelle kann ich in deinem Code keinen Fehler finden. Gibt ja auch nicht viel was man da falsch machen kann.
Was veranlasst dich eigentlich zu der Annahme, dass es nicht funktioniert? Du schreibst schließlich alles in ein/zwei Memos. Es könnte natürlich sein, dass Bruchteile vor dem letzten Thread die anderen etwas in das Memo schreiben was sofort wieder überschrieben wird. Das ist in meinen Augen nämlich das wahrscheinlichste.
Mach mal folgendes
Delphi-Quelltext
1: 2: 3: 4:
| procedure MyThread.UpdateMemo; begin Form1.Memo1.Lines.Add('Finisched: ' + url); end; |
PS: Ein Array mit Threads zu füllen die sich automatisch freigeben ist mutig oder sinnlos. Oder beides. Wenn diese fertig sind bleibt der Wert dort noch enthalten aber die Klasse wurde in der zwischenzeit freigegeben. Wenn du diese einfach nur starten willst kannst du entweder immer wieder die Variable
Thread überschreiben oder etwas in der Art.
Delphi-Quelltext
1: 2: 3: 4: 5:
| with TMyThread do begin Blahhh(); FreeOnTerminate := True; Resume; end; |
So kommst du gar nicht erst in die Verlegenheit eine Instanz davon zu Speichern. Ich Persönlich hebe mir aber gerne die Instanzen auf. Dann sollten sie sich aber nicht selber frei geben.
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.