- statt den einfachen Sleep-Aufrufen wartet ein Thread nun auf das Signal oder eine bestimmte Zeit (ähnlich wie beim Sleep). Die "Wait"-Zeit habe ich höher gesetzt als bei den Sleep-Aufrufen, damit gibt es weniger Blockaden durch synchronisierte Abschnitte.
- Ist der Hauptthread ohne Arbeit (OnIdle-Ereignis) oder sollen die Threads beendet werden, so werden die Signale abgefeuert, so dass die Threads gar nicht warten müssen.
Lese ich da 'Sleep'? 'Wait'?... Au backe. Verwende Synchronisationsobjekte (Semaphoren, Mutexe und so'n Kram).
Mit der Aktualisierung in einem Formular würde Ich das lösen, in dem ich dem Hauptformular per 'PostMessage' ein paar Daten zur Anzeige schicke: Der Thread instantiiert ein Datenobjekt, das er mit Daten füllt. Per PostMessage geht es dann zum Hauptthread (dem Formular z.B.) welches das Objekt übernimmt, anzeigt und zersört. Das ist asynchron.
TThread.Queue
dürfte so oder ähnlich arbeiten.
Du solltest allerdings nicht beliebig viele Synchronize/Queue/PostMessage-Aufrufe durchführen. Alleine damit kann man sich sein System blockieren.