Natürlich sollte ich das. Mich ärgert halt ziemlich dass, sollte ich in einem Task einen dummen Fehler machen, er
nie terminiert, man die Anwendung nur noch über den Taskmanager abschießen kann.
In System.Threading.pas steht sogar
// Check each thread to see if it is already marked for termination and/or if it is hung.
, aber geprüft wird da gar nichts. Einfach Destroy() auf allen Threads aufrufen, nur leider steht da
Delphi-Quellcode:
destructor TThreadPool.TBaseWorkerThread.Destroy;
begin
if FRunningEvent <> nil then
FRunningEvent.WaitFor(INFINITE); // This waits for the Execute to actually be called.
Im Endeffekt läuft es darauf hinaus, dass ich mich nicht traue System.Threading zu verwenden und weiterhin mir selbst immer Threads zusammenfummeln werde. Echt schade.