![]() |
Thread von Hauptunit abrechen
Hi Leuts,
habe nun schon etwas länger nach meinem Problem gesucht, aber leider keine "richtige" Lösung gefunden: Ist es möglich einen Thread aus einem anderen heraus zu beenden. Grund: Mein Programm lädt ganz am Anfang in einem Thread ziemlich große Textdateien aus dem Internet herunter (ca. 14 MB). Das dauert natürlich etwas länger. Wenn man nun das Programm bald wieder beenden möchte. Schließt zwar das Programm, aber der Thread läuft noch weiter. Und genau das möchte ich nicht. Gibt es dafür irgendeinen bestimmten Befehl? mfg Looper |
Re: Thread von Hauptunit abrechen
Hallo,
sollte das nicht mit TThread.Terminate gehen: Zitat:
Klaus |
Re: Thread von Hauptunit abrechen
Hi Klaus01,
funktioniert das denn auch aus der Hauptunit aus. Habe keine Ahnung wie ich das realisieren soll :roll: Schonmal Danke für alle Antworten |
Re: Thread von Hauptunit abrechen
In welcher Unit läuft der Thread denn, bzw. Wo ist er deklariert? Wenn er in einer anderen Unit ist, diese bei Uses hinzufügen.
Zitat:
Mfg |
Re: Thread von Hauptunit abrechen
Zitat:
Du solltest also die Instanz des TTHread Objects kennen. Wenn Du in der Execute Routine abfragst ob die terminated variable gesetzt wurde dann sollte sich der Thread auch mit TTHread.terminate beenden lassen. Ein kleins Beispiel findest Du hier -> ![]() Grüße Klaus |
Re: Thread von Hauptunit abrechen
Zitat:
|
Re: Thread von Hauptunit abrechen
richtig. Die Terminate-Methode setzt das Terminated-Property auf True. In der Execute-methode sollte man dieses property in regelmäßigen Abständen abfragen und entsprechend die Execute-Methode verlassen wenn es auf TRUE steht.
|
Re: Thread von Hauptunit abrechen
Zitat:
Ah okay, vielen Dank. Wenn man jetzt einen Thread hat, welcher viele Funtktionen/Prozeduren aufruft, kann es manchmal kompliziert werden in allen regelmäßig diese Property abzufragen, denke ich. Vor allem wenn die selbe Funktion von verschiedenen Threads benutzt werden kann. Mit TerminateThread bekomme ich es problemlos hin, dass der Thread sofort beendet wird. Habe ich gerade ausprobiert... Spricht irgendetwas gegen TerminateThread und für die Methode mit dem Terminated Property? |
Re: Thread von Hauptunit abrechen
Terminated hat den Vorteil das du den Thread "ordentlich" und "kontrolliert" beenden kannst, zB kannst du dann noch schnell den Fortschritt speichern usw.
Ich kenne TerminateThread zwar nicht, aber das wird die "Totschlagmethode" sein, bei der einfach der Thread abgewürgt wird. Du weißt also nicht was er grad gemacht hat. |
Re: Thread von Hauptunit abrechen
TerminateThread sollte man grundsätzlich vermeiden! Unter anderem wird der Stack des Threads nicht freigegeben, er könnte in einer Critical Section stecken und so weiter.
In der klassischen Version verwendet man Overlapped I/O und wartet nach jeder Operation mit WaitForMultipleObjects auf das Overlapped Event und ein Stopp-Event. Der Rückgabewert wird geprüft und entsprechend reagiert. Leider unterstützen die meisten Komponenten kein Overlapped I/O, daher muss man es meistens selbst implementieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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