![]() |
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 |
Re: Threads werden automatisch beendet
Überwache es doch mal in Deinem Delphi unter: Ansicht->Debug Fenster->Threads.
|
Re: Threads werden automatisch beendet
Zitat:
Zitat:
|
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. |
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. |
Re: Threads werden automatisch beendet
Zitat:
Zitat:
Zitat:
Zitat:
Edit: kein roter Kasten ... :roll: |
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 |
Re: Threads werden automatisch beendet
Zitat:
Delphi-Quellcode:
Das sollte gehen ...
while(not terminated)do
begin // Mach was hier ... Suspend(); end; Immer wieder einen neuen Thread erzeugen erzeugt sogar jede Menge Overhead, da hast du ganz recht. |
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:
|
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 22:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz