Deine selbsterstellten Threads sollten regelmässig überprüfen, ob die Hauptanwendung schon beendet werden soll:
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
// irgend eine Berechnung / Aufgabe, die der Thread in einer Schleife ausführt
for i := ...... do
begin
.....
if Application.Terminated then
begin
// hier evtl. noch Aufräumarbeiten für den Thread
...
Exit; // und dann so schnell wie möglich raus
end;
end;
end;
Das Beenden einer Anwendung wird mit Application.Terminate eingeleitet. (Auch das Schliesen des Hauptform führt intern zum Aufruf von Application.Terminate)
Dies bewirkt, dass das Flag Application.Terminate
d auf True gesetzt wird.
Und genau dieses Flag müssen die Threads immer mal wieder überprüfen.