Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TThread - OnTerminate (https://www.delphipraxis.net/9302-tthread-onterminate.html)

DataCool 23. Sep 2003 13:38


TThread - OnTerminate
 
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

Luckie 23. Sep 2003 13:40

Re: TThread - OnTerminate
 
Probiers aus. Leg doch in CleanUp eine Datei an. Wenn es die nachher gibt, wird die Prozedur wohl ausgeführt.

DataCool 23. Sep 2003 13:52

Re: TThread - OnTerminate
 
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

Luckie 23. Sep 2003 13:59

Re: TThread - OnTerminate
 
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.

SirThornberry 23. Sep 2003 14:22

Re: TThread - OnTerminate
 
Wie wärs wenn du einfach einen Timer verwendest der alle 60 Sekunden aufgerufen wird und im OnTimer-Ereignis den Thread jedesmal neu erzeugt?!

DataCool 23. Sep 2003 14:29

Re: TThread - OnTerminate
 
Das wäre auch ne Möglichkeit, aber ob das Sinn und Zweck von Threads ist ?


Was sagt die Allegemeinheit dazu ?

Gruß Data

Luckie 23. Sep 2003 14:30

Re: TThread - OnTerminate
 
Schwachsinn.

SirThornberry 23. Sep 2003 14:38

Re: TThread - OnTerminate
 
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..

Luckie 23. Sep 2003 14:44

Re: TThread - OnTerminate
 
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.

SirThornberry 23. Sep 2003 15:19

Re: TThread - OnTerminate
 
ok - luckie hat immer recht :cry: war halt nur ne idee wie mans vermeiden kann das der destructor nicht ausgeführt wird....


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.
Seite 1 von 2  1 2      

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