AGB  ·  Datenschutz  ·  Impressum  







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

TThread - OnTerminate

Ein Thema von DataCool · begonnen am 23. Sep 2003 · letzter Beitrag vom 24. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

TThread - OnTerminate

  Alt 23. Sep 2003, 14:38
Hi Leute,

wenn ich in einem Thread im Constructor Create verschiedene Objekte erzeuge, dann müssen diese Objekte logischerweise auch irgentwann mal wieder freigegeben werden.

Dazu erstelle ich eine Procedure CleanUp diese weise ich im Constructor des Threads wie folgt zu :

OnTerminate := Cleanup;

In Cleanup werden dann alle erzeugten Objekte wieder freigegen.

Funktinoiert auch alles einwandfrei !!

Jetzt kommt das Problem, wenn ich im Execute-Code den Thread mit Sleep(60000) den Thread für 60 Sek. schlafen lege, ist dieser ja nicht mehr zuteilungsfähig.

Wenn ich jetzt meine Applikation beende, wird auch der entsprechende Process beendet und damit alle laufenden Threads die zu diesem Process gehören.
Meine Frage ist, ob bei dieser Art der Beendigung meine Procedure CleanUp ausgeführt wird oder nicht ?
Wenn nicht, hätte ich ja ein Speicher-Leck ??!!!
Wie kann ich das umgehen ?

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TThread - OnTerminate

  Alt 23. Sep 2003, 14:40
Probiers aus. Leg doch in CleanUp eine Datei an. Wenn es die nachher gibt, wird die Prozedur wohl ausgeführt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: TThread - OnTerminate

  Alt 23. Sep 2003, 14:52
Die Idee hatte ich auch schon, leider wird die Datei nicht erstellt !

Kann es sein das der resverirte Speicher(Objekte) trotzdem freigegeben wird ?

Wenn nicht, wie soll man den einen Thread schreiben der nur alle 60 Sek. im Hintergrund eine Http-Anfrage an ein PHP-Script schickt und die Antwort auswertet ?

Wenn ich den Sleep Intervall runtersetze und einfach die Sleep-Zeiten zusammen rechne bis meine 60 Sek erreicht sind, dann wird meine Applikation unperfotmant CPU-Last 98%, Du erinnerst Dich ?

Muss ich dann meine ganzen Threads durch Timer auf der MainForm ersetzen ? Das kann doch nicht sein ?!

Vor allen Dingen würde dann meine Anwendung für die Dauer einer Anfrage blockiert !!

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TThread - OnTerminate

  Alt 23. Sep 2003, 14:59
Sollten freigegeben werden, da der Thread regulär beendet wird. Aber wenn der Prozess eh endet, muüssen dich die Objekte eh nicht mehr kümmern, da Windows den gesamten Adressraum des Prozess freigibt, wenn dieser beendet wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: TThread - OnTerminate

  Alt 23. Sep 2003, 15:22
Wie wärs wenn du einfach einen Timer verwendest der alle 60 Sekunden aufgerufen wird und im OnTimer-Ereignis den Thread jedesmal neu erzeugt?!
Jens
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: TThread - OnTerminate

  Alt 23. Sep 2003, 15:29
Das wäre auch ne Möglichkeit, aber ob das Sinn und Zweck von Threads ist ?


Was sagt die Allegemeinheit dazu ?

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: TThread - OnTerminate

  Alt 23. Sep 2003, 15:30
Schwachsinn.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: TThread - OnTerminate

  Alt 23. Sep 2003, 15:38
Der Sinn und Zweck eines Threads das die Anwendung neben der eigentlichen Aufgabe noch andere Aufgaben erfüllen kann und was soll so "scheiße" dran sein den Thread alle 60 Sekunden neu zu erzeugen??? Ist meiner meinung nach resourcenschonender als in dem Thread nen Sleep zu verwenden..
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: TThread - OnTerminate

  Alt 23. Sep 2003, 15:44
Weil der Timer die ganze Zeit läuft? Das Ständige erzeugen und zerstören von Ressourcen halte ich auch nicht für sehr performant. Das System muß dann nähmlich jedes mal Die Objekte erzeugen die der Thread im Konstruktor braucht und zudem muß jedes mal ein Kernel-Objekt angelegt werden, ein Stack im Adresssraum des Prozesses erzeugt werden, was auch alles wieder neu verwaltet werden will.
Und wenn ein Thread mit Sleep schlafen geschickt wird, dann braucht er keine CPU-Zeit und belastet das System nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: TThread - OnTerminate

  Alt 23. Sep 2003, 16:19
ok - luckie hat immer recht war halt nur ne idee wie mans vermeiden kann das der destructor nicht ausgeführt wird....
Jens
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz