... Du überschreibst DoTerminate anstatt Terminate...
Ich hatte da schon so ein Bauchgefühl, dass das nicht so ganz passt.
Bei Delphi 5 ist
Terminate
nicht virtuell und kann daher nicht überschrieben, sondern nur verdeckt werden.
Deshalb lass ich den Thread jede Sekunde einmal aufwachen, damit er prüfen kann ob er terminiert wurde.
Falls Terminate in neueren Delphi Versionen virtuell ist, könnte man natürlich per bedingter Compilierung deinen Vorschlag umsetzen.