Geht so weit ich weiss nicht (in .NET schon).
Wenn man eine Exception in einem anderen Thread raisen könnte hättest du immer noch Probleme beim Freigeben von Speicher.
Denn wenn du sowas hast:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| ABC := TABC.Create; try finally ABC.Free; end; |
Man geht hier davon aus, dass zwischen Create und try keine Exceptions geworfen werden. Dies wäre nicht garantiert, wenn man von einem anderen Thread aus einfach mal eine Exception in einen anderen Thread injecten könnte.
Statt auf Terminated zu prüfen könntest du theoretisch auch Speicher überschreiben und so einen Jump-Befehl "injecten". Aber sauber ist das natürlich nicht.
TerminateThread könntest du verwenden, wenn du in einem Thread nur Harmloses machst (was vermutlich eher nicht der Fall ist), d.h. wenn du alle Objekte auf dem Stack allokierst, keine Win32-Handles hast, keine CriticalSection verwendest, keine Kernel-Code ausführst usw. verwendest. Wohl eher nicht der Fall.
Oder du machst eine Multi-Prozess Architektur. Dann könntest du den Prozess abschiessen. Du kannst über Shared Memory Speicher austauschen, Messages verschicken und Semaphores verwenden.