Du kannst im Ereignis "OnTerminate" des Threads dessen Eigenschaft "FatalException" prüfen. Die wird nämlich beim Auftreten einer
Exception auf eben diese gesetzt.
Beispiel:
Delphi-Quellcode:
procedure TForm1.OnThreadTerminate(Sender: TObject);
begin
if TThread(Sender).FatalException
is Exception then
LogException(
Exception(TThread(Sender).FatalException));
end;
Solltest du das Ereignis "OnTerminate" anderweitig brauchen, dann kannst du eine eigene Thread-Basisklasse von TThread ableiten, in der du die virtuelle Funktion "DoTerminate" durch deine eigene ersetzt und von der du dann wiederum alle deine Thread-Klassen ableitest.
Beispiel:
Delphi-Quellcode:
type
TThreadBase =
class(TThread)
protected
procedure DoTerminate;
override;
end;
procedure TThreadBase.DoTerminate;
begin
if FatalException
is Exception then
// Achtung: wir sind noch im Thread-Kontext. Ggf. selbst ein Synchronize machen!
LogException(
Exception(FatalException));
// Hier wird OnTerminate aufgerufen
inherited;
end;