Der übliche Weg einen solchen Thread vorzeitig zu beenden ist der Aufruf von Terminate oder TerminateAndWaitFor. Dazu muss aber sinnvollerweise im OnRun-Event auch regelmäßig auf Sender.Terminated geprüft werden und die Event-Methode auch entsprechend beendet werden. Wie es jetzt ist, läuft der Thread mindestens 16 bzw. 12 Sekunden, bevor er sich beendet.
Abgesehen davon ist es grob fahrlässig
- eine globale Variable (ohne Synchronisierung) zu benutzen
- dieselbe (auch noch globale) Thread-Instanz zweimal zu verwenden, ohne die vorherige freizugeben bzw. anderweitig für die spätere Freigabe zu sorgen (z.B. durch die Übergabe eines Owners in Create)
- Destroy direkt aufzurufen