Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exceptions in Threads abfangen (https://www.delphipraxis.net/91616-exceptions-threads-abfangen.html)

C.Schoch 7. Mai 2007 21:15


Exceptions in Threads abfangen
 
Hi,
Wenn bei Delphi in einem Thread eine Exception auftritt beendet sich dieser ohne eine Meldung oder ähnliches.
Daher suche ich nach einer Möglichkeit um Exceptions in Threads abzufangen und das auftreten einer solchen zumindest in ein Log zu schreiben.

Schon mal Danke für eure Antworten

Flocke 7. Mai 2007 23:57

Re: Exceptions in Threads abfangen
 
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;

C.Schoch 8. Mai 2007 14:07

Re: Exceptions in Threads abfangen
 
Hi,

Dankeschön Flocke, so funktioniert es wunderbar :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz