AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[D7] EThread: Thread-Fehler: (6)

Ein Thema von Hobbycoder · begonnen am 14. Feb 2023 · letzter Beitrag vom 15. Feb 2023
 
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#1

[D7] EThread: Thread-Fehler: (6)

  Alt 14. Feb 2023, 18:12
Hallo Leute,
ich habe in einem älteren Programm einen (für mich) seltsamen Fehler. Nach ca. einem halben Tag Laufzeit kommt es zu einem Thread-Fehler. Der Callstack führt mich zu einem TThread.Create. Es handelt sich bei diesem Thread, der in regelmäßigen Abständen eine Referenzliste aus einer Datenbank abruft um diese aktuell zu halten. Von diesen Threads gibt es mehrere, weil teilweise unterschiedliche Intervalle notwendig sind. Der Thread wird bis zum Mittag einige hundert mal aufgerufen und läuft fehlerfrei durch.
Vor dem Start des Threads wird geprüft ob er aus irgendeinem Grund noch läuft und wird beendet.
Beendet wird er so:
Delphi-Quellcode:
proceudre Tfrm_main.KillThreadUrlaubsGrund;
var
  ThreadHandle: THandle;
begin
  if ThLoadUrlaubsGrund<>nil then
  begin
    ThreadHandle:=ThLoadUrlaubsGrund.Handle;
    ThLoadUrlaubsGrund.OnFinished:=nil;
    ThLoadUrlaubsGrund.OnNewUrlaubsgrundList:=nil;
    ThLoadUrlaubsGrund.Terminate;
    WaitForSingleObject(ThreadHandle, 500);
    ThLoadUrlaubsGrund:=nil;
  end;
end;
Gestarte wird er so:
Delphi-Quellcode:
  
  KillThreadUrlaubsGrund;
  ThLoadUrlaubsGrund:=TThreadLoadUrlaubsgrundList.Create(True, dm1.Con);
  HandleUrlaubsgrundListThread:=ThLoadUrlaubsGrund.Handle;
  ThLoadUrlaubsGrund.OnFinished:=OnFinishUrlaubsGrundThread;
  ThLoadUrlaubsGrund.OnNewUrlaubsgrundList:=OnUpdateUrlaubsGrundList;
  WritePrivateLog('Start Thread UrlaubsGrund ('+IntToStr(HandleUrlaubsgrundListThread)+')');
  ThLoadUrlaubsGrund.Resume;
Der Fehler tritt dann im Create des TThreadLoadUrlabusgrundList auf:
Delphi-Quellcode:
constructor TThreadLoadUrlaubsgrundList.Create(Suspended: Boolean;
  Con: TZConnection);
begin
  inherited Create(Suspended); //<--------- Hier zeigt Callstack den Fehler Thread-Fehler: (6)
  FDBHost:=Con.HostName;
  FDBPort:=Con.Port;
  FDBUser:=Con.User;
  FDBPass:=Con.Password;
  FDBDatabase:=Con.Database;
  FDBProtocol:=Con.Protocol;
  self.FreeOnTerminate:=True;
end;
Beende ich den Thread falsch? Der Thread läuft mit FreeOnTerminate=True.
Als letzte Zeile im Execute des Thread rufe ich noch einen Event auf, der im Aufrufthread die Variable des Thread auf nil setzt. Sollte also der Thread, aus welchem Grund auch immer, länger brauchen als der Aufrufintervall definiert ist, soll er über die Methode KillThreadUrlaubsGrund gekillt werden.

Vielleicht steh ich ja auf dem Schlauch, und mache irgendwas grundlegend falsch.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 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 by Thomas Breitkreuz