Nja, normal hat man bei Konsolen ja alles hintereinander.
Also einfach den Code für's Ende ans Ende der
DPR.
Normal hat die Konsolen-Vorlage ein Try-Except, welches Exceptions nicht neu auslöst, also einfach nach dessen END diesen Code,
oder nochmal ein Try-Finally drumrum.
* So, das war jetzt für das normale Programmende oder wenn eine
Exception in deinem Programmcode auftritt.
* Dann gibt es noch den Fall von Strg+C oder Strg+Untbr, sollte das eine
Exception auslösen und abbrechen.
* Was das Schließen des Konsolenfensters macht, weiß ich grade nicht. (sowas wie SIGKILL, SIGTERM, SIGINT oder SIGQUIT verhält sich ja unterschiedlich)
* Einen "richtigen" Abschuss des Programms (Terminate) bekommst'e natürlich garnicht mit, weil dein Programm hart abgeschossen wird und nichts mehr ausführt
Geht es wirklich um Threads, dann mußt du das selbst regeln.
* im Hauptthread den Threads Bescheid geben
* und womöglich auf das Ende der Threads warten
* wartest du nicht, dann werden deine Threads hart abgeschossen ... vor allen, weil Delphi beim ProgrammEnde (des Hauptthreads) ein
TerminateProcess auslöst (egal ob Konsole,
VCL, FMX usw.)
* Grundsächlich schißet "normal" Windows immer den kompletten Prozess ab (Terminate), wenn eine
Exception in irgendeinem Thread (auch dem Hauptthread) bis zum Windows durchrauscht, drum fängt TThrad Exceptions still und heimlich ab (wenn man es im OnTerminate nicht prüft)