Ich habe in meinen Execute-Methoden meiner Threads oft in der Schleife eine Variable, die ich von außen setzen kann.
while CanRun do
Und im Hauptprogramm
Delphi-Quellcode:
Thread.CanRun := False;
Thread.Terminate;
Thread.WaitFor;
Und gewöhn dir mal ab, auf False und True abzufragen sondern nutze logische Operatoren wie NOT, AND, OR usw.
Also bei dir
while (not Th1.Beendet) and (not Th2.Beendet) and (not Th3.Beendet) do
Vielleicht solltest du dir auch überlegen anstatt auf Beendet abzufragen ob er noch laufen darf, dann musst du nicht immer alles negiert denken. Das macht es auch einfacher ...
Und du solltest auch strikt
VCL und Threads voneinander trennen. Die Threads machen keinen Sinn wenn du andauernd über Synchronize auf den Mainthread zugreifst.
Einfach wie himitsu sagt, dafür sorgen das die Threads beendet werden, bevor das Fenster beendet wird.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.