AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads werden automatisch beendet

Ein Thema von der_boss · begonnen am 19. Aug 2005 · letzter Beitrag vom 20. Aug 2005
Antwort Antwort
Seite 1 von 3  1 23      
der_boss

Registriert seit: 10. Sep 2004
Ort: Dresden
27 Beiträge
 
Delphi 6 Professional
 
#1

Threads werden automatisch beendet

  Alt 19. Aug 2005, 10:39
Hallo Freunde,

ich programmiere eine Multithreadanwendung, OnFormCreate des Hauptprogramms Create ich die anderen zwei Threads gleich mit. IM Taskmanager wird meine Anwendung auch mit 3Threads (Haupt + 2 zusätzliche) angezeigt. Wenn ich nun den einen Thread mit Terminate beende, zeigt mir die Taskmangaer an, dass mein Prgramm nur noch zwei Threads umfasst. Wenn ich aber wieder Porgrammablauf starte, dann funktioniert noch alles.
a) Wie krieg ich raus, welchen Thread er beendet?
b) Beendet er wirklich einen Thread?
c) Wie kann ich diese Willkür beenden oder
d) Ist das ein Fehler vom Taskmanager?

Ich bin euch wie immer sehr verbunden

Boss
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 10:47
Überwache es doch mal in Deinem Delphi unter: Ansicht->Debug Fenster->Threads.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 11:16
Zitat von der_boss:
Wenn ich nun den einen Thread mit Terminate beende, zeigt mir die Taskmangaer an, dass mein Prgramm nur noch zwei Threads umfasst.
Stimmt: 3 - 1 = 2. Wo ist das Problem?

Zitat:
Wenn ich aber wieder Porgrammablauf starte, dann funktioniert noch alles.
Äh, wie? Wenn du was machst? Und was heißt 'funktioniert noch alles'? Was sollte denn nicht mehr gehen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
der_boss

Registriert seit: 10. Sep 2004
Ort: Dresden
27 Beiträge
 
Delphi 6 Professional
 
#4

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 11:24
also, ich habe festgestellt, dass mit terminate der thread beendet wird und dann nicht mehr erscheint, allerdings existiert er noch, denn wenn ich resume aufrufe, kommt kein fehler. wie kann ich einen terminierten thread wieder reaktivieren?

der thread soll bestehen bleiben, die aktion mit terminate ist aber so schön um denthread definiert zu beenden.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 11:29
Ich rate jetzt einfach mal, weil du immer noch die nötigen Informationen beharrlich verschweigst.

Du benutzt die TThread-Klasse der VCL. Dein Thread-Objekt ist global. Die Eigenschaft FreeOnTerminate steht bei dir auf False, somit wird die Instanz des Thread nicht wieder freigebene und ein weiterer Aufruf der Methode Resume schlägt nicht fehl.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 11:30
Zitat von der_boss:
allerdings existiert er noch
... du meinst das TThread-Objekt existiert noch, aber doch nicht der Thread. Ein Thread definiert sich ja gerade als Ausführungsfaden ... und wenn er beendet ist, ist er weg.

Zitat von der_boss:
denn wenn ich resume aufrufe, kommt kein fehler.
Vielleicht macht Delphi das transparent und startet eine neue Instanz mit der gleichen Threadfunktion.

Zitat von der_boss:
wie kann ich einen terminierten thread wieder reaktivieren?
Garnicht ... neue Instanz ja, reaktivieren nein.

Zitat von der_boss:
der thread soll bestehen bleiben, die aktion mit terminate ist aber so schön um denthread definiert zu beenden.
Terminate beendet ihn gerade nicht definiert, sondern dafür würdest du innnerhalb der Threadfunktion Exit aufrufen oder ans Ende der Funktion springen.


Edit: kein roter Kasten ...
  Mit Zitat antworten Zitat
der_boss

Registriert seit: 10. Sep 2004
Ort: Dresden
27 Beiträge
 
Delphi 6 Professional
 
#7

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 11:36
lucki hat recht, tut mir leid, fragt halt, wenn ich nicht das richtige erzähle..

habe ich jetzt ne while not terminated schleife in ne endlosschleife gepackt..
nach while not terminated kommt suspend, dann könnte ich mit resume evtl fortfahren, ich probier's mal aus, denn jedes mal den thread neu createn ist ja auch nicht fein
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#8

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 11:39
Zitat von der_boss:
habe ich jetzt ne while not terminated schleife in ne endlosschleife gepackt..
nach while not terminated kommt suspend, dann könnte ich mit resume evtl fortfahren, ich probier's mal aus, denn jedes mal den thread neu createn ist ja auch nicht fein
Also so?:
Delphi-Quellcode:
while(not terminated)do
begin
  // Mach was hier ...
  Suspend();
end;
Das sollte gehen ...

Immer wieder einen neuen Thread erzeugen erzeugt sogar jede Menge Overhead, da hast du ganz recht.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 11:41
Warum sind die Variablen denn global? Ist doch vollkommen unnötig und führt hier wieder nur zu Problemen, wie man sieht bei der Fehlersuche.

Deine Lösung habe ich nicht verstanden. Versuch dich mal etwas besser auszudrücken.

Zitat:
Immer wieder einen neuen Thread erzeugen erzeugt sogar jede Menge Overhead, da hast du ganz recht.
So lange es immer nur zwei, drei sind und diese auch sauber beendet werden und das THread-Objekt auch wieder suaber freigegeben wird, sehe ich da eiegntlich kein Problem.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
der_boss

Registriert seit: 10. Sep 2004
Ort: Dresden
27 Beiträge
 
Delphi 6 Professional
 
#10

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 11:43
hat aber auch nicht geklappt

so von wegen:
while(true) do begin
while not terminated do begin
end;
suspend;
end; // forever

Ritti (12:43 PM) :
ich kann den thread nicht einfach mit suspend abwürgen, weil da externe hardware dranhängt, deren einer befehl erst abgearbeitet werden muss, bevor ein neuer kommt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 15:52 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