AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wie starte ich abgelaufenen Thread erneut?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie starte ich abgelaufenen Thread erneut?

Ein Thema von iphi · begonnen am 26. Okt 2009 · letzter Beitrag vom 26. Okt 2009
Antwort Antwort
Seite 2 von 2     12   
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 20:26
1. Wenn man die TThread-Property "FreeOnTerminate" setzt, solltest du tunlichst kein Free mehr selbst aufrufen, da das ein Griff in's Leere wäre. Das kanonische "ja" von mkinzler ist also u.U. mit Vorsicht zu genießen.

2. Der Delphi-Speichermanager gibt einmal reservierten Speicher nicht immer umgehend an Windows zurück, sondern hält Bereiche zum schnellen "Neu"-reservieren vor. Das heisst, dass du z.B. im Taskmanager nicht zwangsweise eine Änderung siehst wenn du etwas freigegeben hast.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 20:28
Ein Aufruf von Free, sollte aber nicht schaden. Zudem wäre es bei einem Fehler im Destruktor egal, wie er aufgerufen wird
Markus Kinzler
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#13

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 20:34
Ich habe keinen eigenen Destruktor, nur den ererbten von TThread.

Ich benutze nicht FreeOnTerminate, da ich die Speichereffekte sehen will.

Ich frage den Prozessspeicher im Programm ab, nicht im Taskmanager. Dabei fiel mir auf, dass mit jedem Öffnen eines Unterfensters (mit Fenster.Visible:=true) der Prozessspeicher vergrößert wird, beim Schließen aber nicht wieder verkleinert wird. Das scheint dann wohl die Reserviererei zu sein.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 20:36
Alles was du selber anlegst, musst du auch selber Freigeben.
Markus Kinzler
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 20:39
Guten Abend,

wieso schickst Du den Thread nicht in den Ruhezustand und weckst ihn wieder
wenn Du ihn wieder benötigst.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 20:47
Zitat von mkinzler:
Ein Aufruf von Free, sollte aber nicht schaden.
Tut es aber wenn alles hinter der Referenz schon free ist

@Destruktor: Wenn du in deinem Threadobjekt von irgendetwas Instanzen erzeugst, musst du diese auch immer selbst freigeben - das tut TThread nicht für dich.

Das mit den Fenstern ist nochmal etwas komplizierter. Da wurschtelt Windows selbst auch noch etwas mit den Ressourcen herum, und das auch nicht immer 100%ig nachvollziehbar. Es kann z.B. auch mal sein, dass sich der verwendete Speicher eines Programmes extrem verkleinert, wenn sein Fenster minimiert wird. Wenn du versuchst auf diese Weise Lecks zu finden, freunde dich lieber mit einem Profiler an - die können das meist erheeeeblich akkurater. Bei der reinen Speichernutzung spielen zu viele weitere Faktoren mit um qualitative Aussagen machen zu können, vor allem wenn es nur um ein paar popelige Bytes eines TThreads geht. Das geht im sonstigen "Rauschen" total unter.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:48 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