Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie starte ich abgelaufenen Thread erneut? (https://www.delphipraxis.net/142342-wie-starte-ich-abgelaufenen-thread-erneut.html)

iphi 26. Okt 2009 18:19


Wie starte ich abgelaufenen Thread erneut?
 
Hallo,

hier wieder eine Anfängerfrage zum Thema Threads.

Ich habe ein Threadobjekt definiert, das ich so starte:

Delphi-Quellcode:
Capture := TCapture.Create(false)
Nach meinem Verständnis wird hierbei die Threaddatenstruktur in der Variable Capture angelegt und der Thread beginnt zu arbeiten bis er fertig ist. Danach sind nach meinem Verständnis die Daten und Methoden des Threads aber immernoch da, d.h. ich müsste doch meinen Capture-thread einfach wieder erneut starten können.
Gibt es also sowas wie TThread.Machsnochmal oder muss ich Capture.Free machen und dann erneut die Datenstrukturen mit Capture.Create anlegen?

Gruß, Thomas

Apollonius 26. Okt 2009 18:20

Re: Wie starte ich abgelaufenen Thread erneut?
 
Kurz und knapp: Das ist dann ein anderer Thread. Ein Mensch lebt auch nicht zweimal. :wink: Und ein TThread-Objekt kapselt auch nur einen Windows-Thread.

iphi 26. Okt 2009 18:31

Re: Wie starte ich abgelaufenen Thread erneut?
 
Was heißt das in Delphicode?

Delphi-Quellcode:
//machs nochmal
Capture.Free;
Capture.Create(false);
?

mkinzler 26. Okt 2009 18:34

Re: Wie starte ich abgelaufenen Thread erneut?
 
Delphi-Quellcode:
Capture := TCapture.Create(false);

iphi 26. Okt 2009 18:45

Re: Wie starte ich abgelaufenen Thread erneut?
 
Ok.

Noch ne dumme Frage:
Wozu braucht man dann den Thread-Destruktor Free?

mkinzler 26. Okt 2009 18:47

Re: Wie starte ich abgelaufenen Thread erneut?
 
Free ist kein Destruktor, sondern eine normale Procedure, welche verschiedene Überprüfungen durchführ und dann den eigentlich Destruktr aufruft.
Ohne ihn, würde die alte Struktur im Speicher bleiben

iphi 26. Okt 2009 18:54

Re: Wie starte ich abgelaufenen Thread erneut?
 
Dann muss ich also vor
Delphi-Quellcode:
Capture := TCapture.Create(false);
auf jeden Fall
Delphi-Quellcode:
Capture.Free;
aufrufen, weil ich andernfalls ein Speicherleck programmiere?

mkinzler 26. Okt 2009 18:57

Re: Wie starte ich abgelaufenen Thread erneut?
 
Ja. Es wird neuer Speicher angefordert, auf den die Referenz(Zeiger) dann gesetzt wird.

iphi 26. Okt 2009 19:19

Re: Wie starte ich abgelaufenen Thread erneut?
 
Noch eine Frage:

Warum verändert dann Free den genutzten Prozessspeicher nicht? Ich hätte erwartet, dass beim Entladen des abgelaufenen Threadobjekts Speicher freigegeben wird.

mkinzler 26. Okt 2009 19:20

Re: Wie starte ich abgelaufenen Thread erneut?
 
Free selber ruft nur den Destruktor auf, dessen Aufgabe ist es den Speicher freizugeben. Wie sieht dieser aus?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr.
Seite 1 von 2  1 2      

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