![]() |
Thread von "aussen" abbrechen
Hi,
mein programm lief nun ca. 5 tage durch. Leider blieben in der zeit 2 Threads "stehen". Es wurden in dieser zeit ca. 2.500 thread erzeugt und beendet. Maximal liefen 73 auf einmal. Ich habe keine ahnung wo die sich die 2 rumtreiben. Es ist leider auch sehr schwer nachzuvollziehen. Mir fällt leider überhauptnix ein wie ich das reproduzieren könnte. So, nun zur frage. Kann ich die Threads irgendwie von aussen abbrechen bzw. killen? Ich erzeuge die threads wie mir hier geraten wurde wie folgt.
Delphi-Quellcode:
Kann ich danach überhaupt nochwas mit dem Handle anfangen? bzw. ihn darüber abbrechen? Wenn ja wäre es ja einfach dort eine art Watchdog zu bauen.
Thread[i].ThreadHandle:=BeginThread(nil, 0, @Chan,@Thread[i].MyID, 0, Thread[i].ThreadID);
if Thread[i].ThreadHandle<>0 then CloseHandle(Thread[i].ThreadHandle); Vielen dank im voraus |
Re: Thread von "aussen" abbrechen
Hi schau mal
![]() |
Re: Thread von "aussen" abbrechen
Ist denn das ThreadHandle überhaupt noch gültig?
|
Re: Thread von "aussen" abbrechen
Wenn du zuerst den Thread terminierst und dann das Handle schließt schon :-P
|
Re: Thread von "aussen" abbrechen
Also von dem beispiel wie es oben steht, ist das handle wohl nichtmehr gültig. Richtig? Wie komme ich sonstnoch an den Thread ran?
|
Re: Thread von "aussen" abbrechen
:roll:
Delphi-Quellcode:
Thread[i].ThreadHandle:=BeginThread(nil, 0, @Chan,@Thread[i].MyID, 0, Thread[i].ThreadID);
if Thread[i].ThreadHandle<>0 then begin TerminateThread(Thread[i].ThreadHandle,0); CloseHandle(Thread[i].ThreadHandle); end; |
Re: Thread von "aussen" abbrechen
Erstmal danke für deine hilfe. Also müsste ich das Close oben raushohlen. Die frage ist nun, darf der Thread selber, wenn er fertig ist, das Close ausführen oder scheppert das?
|
Re: Thread von "aussen" abbrechen
Genau genommen brauchst Du das Handle gar nicht, wenn Du die ThreadID hast und kannst es also prinzipiell direkt nach Threaderstellung schließen. Wenn Du dann wirklich einen Thread killen willst, holst Du Dir mit OpenThread einfach ein neues Handle zum Terminieren. Die Gefahr Handles zu leaken ist dabei viel geringer.
Generell wäre der bessere Weg aber die Ursache zu finden, wieso Threads "stehen bleiben". |
Re: Thread von "aussen" abbrechen
Zitat:
Das mit dem OpenThread werde ich mir nachher mal ansehen. Wenn ich dazu noch fragen haben sollte, poste ich einfach :zwinker: Danke |
Re: Thread von "aussen" abbrechen
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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 by Thomas Breitkreuz