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 1 von 2  1 2      
iphi

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

Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 19:19
Hallo,

hier wieder eine Anfängerfrage zum Thema Threads.

Ich habe ein Threadobjekt definiert, das ich so starte:

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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 19:20
Kurz und knapp: Das ist dann ein anderer Thread. Ein Mensch lebt auch nicht zweimal. Und ein TThread-Objekt kapselt auch nur einen Windows-Thread.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
iphi

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

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 19:31
Was heißt das in Delphicode?

Delphi-Quellcode:
//machs nochmal
Capture.Free;
Capture.Create(false);
?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 19:34
Capture := TCapture.Create(false);
Markus Kinzler
  Mit Zitat antworten Zitat
iphi

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

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 19:45
Ok.

Noch ne dumme Frage:
Wozu braucht man dann den Thread-Destruktor Free?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 19:47
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
Markus Kinzler
  Mit Zitat antworten Zitat
iphi

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

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 19:54
Dann muss ich also vor
Capture := TCapture.Create(false); auf jeden Fall
Capture.Free; aufrufen, weil ich andernfalls ein Speicherleck programmiere?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 19:57
Ja. Es wird neuer Speicher angefordert, auf den die Referenz(Zeiger) dann gesetzt wird.
Markus Kinzler
  Mit Zitat antworten Zitat
iphi

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

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 20:19
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Wie starte ich abgelaufenen Thread erneut?

  Alt 26. Okt 2009, 20:20
Free selber ruft nur den Destruktor auf, dessen Aufgabe ist es den Speicher freizugeben. Wie sieht dieser aus?
Markus Kinzler
  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 13:42 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