Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Threads werden automatisch beendet (https://www.delphipraxis.net/51807-threads-werden-automatisch-beendet.html)

der_boss 19. Aug 2005 10:39


Threads werden automatisch beendet
 
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

Memo 19. Aug 2005 10:47

Re: Threads werden automatisch beendet
 
Überwache es doch mal in Deinem Delphi unter: Ansicht->Debug Fenster->Threads.

Luckie 19. Aug 2005 11:16

Re: Threads werden automatisch beendet
 
Zitat:

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?

der_boss 19. Aug 2005 11:24

Re: Threads werden automatisch beendet
 
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.

Luckie 19. Aug 2005 11:29

Re: Threads werden automatisch beendet
 
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.

Olli 19. Aug 2005 11:30

Re: Threads werden automatisch beendet
 
Zitat:

Zitat von der_boss
allerdings existiert er noch

:shock: ... 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:

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:

Zitat von der_boss
wie kann ich einen terminierten thread wieder reaktivieren?

Garnicht ... neue Instanz ja, reaktivieren nein.

Zitat:

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 ... :roll:

der_boss 19. Aug 2005 11:36

Re: Threads werden automatisch beendet
 
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

Olli 19. Aug 2005 11:39

Re: Threads werden automatisch beendet
 
Zitat:

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.

Luckie 19. Aug 2005 11:41

Re: Threads werden automatisch beendet
 
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.

der_boss 19. Aug 2005 11:43

Re: Threads werden automatisch beendet
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.
Seite 1 von 3  1 23      

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