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:
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.
Capture := TCapture.Create(false)
Gibt es also sowas wie TThread.Machsnochmal oder muss ich Capture.Free machen und dann erneut die Datenstrukturen mit Capture.Create anlegen? Gruß, Thomas |
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.
|
Re: Wie starte ich abgelaufenen Thread erneut?
Was heißt das in Delphicode?
Delphi-Quellcode:
?
//machs nochmal
Capture.Free; Capture.Create(false); |
Re: Wie starte ich abgelaufenen Thread erneut?
Delphi-Quellcode:
Capture := TCapture.Create(false);
|
Re: Wie starte ich abgelaufenen Thread erneut?
Ok.
Noch ne dumme Frage: Wozu braucht man dann den Thread-Destruktor Free? |
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 |
Re: Wie starte ich abgelaufenen Thread erneut?
Dann muss ich also vor
Delphi-Quellcode:
auf jeden Fall
Capture := TCapture.Create(false);
Delphi-Quellcode:
aufrufen, weil ich andernfalls ein Speicherleck programmiere?
Capture.Free;
|
Re: Wie starte ich abgelaufenen Thread erneut?
Ja. Es wird neuer Speicher angefordert, auf den die Referenz(Zeiger) dann gesetzt wird.
|
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. |
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. |
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