Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Exceptions in Threads abfangen

  Alt 8. Mai 2007, 00:57
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;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat