![]() |
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 |
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:
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.
procedure TForm1.OnThreadTerminate(Sender: TObject);
begin if TThread(Sender).FatalException is Exception then LogException(Exception(TThread(Sender).FatalException)); end; 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; |
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