AGB  ·  Datenschutz  ·  Impressum  







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

Thread von Hauptunit abrechen

Ein Thema von Looper · begonnen am 25. Apr 2008 · letzter Beitrag vom 25. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#1

Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 14:25
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 14:41
Hallo,

sollte das nicht mit TThread.Terminate gehen:

Zitat von DelphiHilfe:
Signals the thread to terminate by setting the Terminated property to True.

procedure Terminate;

Description

Terminate sets the thread’s Terminated property to True, signaling that the thread should be terminated as soon as possible. Unlike the Windows API TerminateThread, which forces the thread to terminate immediately, the Terminate method merely requests that the thread terminate. This allows the thread to perform any cleanup before it shuts down.

For Terminate to work, the thread's Execute method and any methods that Execute calls should check Terminated periodically and exit when it's True.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 14:46
Hi Klaus01,
funktioniert das denn auch aus der Hauptunit aus. Habe keine Ahnung wie ich das realisieren soll


Schonmal Danke für alle Antworten
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 14:56
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 von Looper:
funktioniert das denn auch aus der Hauptunit aus.
Probiers aus

Mfg
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 14:57
Zitat von Looper:
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
Du startest doch den Thread auch in der HauptUnit.
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
-> http://www.delphicorner.f9.co.uk/articles/op3.htm

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#6

Re: Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 15:10
Zitat von Klaus01:
Wenn Du in der Execute Routine
abfragst ob die terminated variable gesetzt wurde
dann sollte sich der Thread auch mit TTHread.terminate beenden lassen.
Sehe ich das richtig, dass der Thread auch wirklich nur beendet wird, wenn man das property abfragt und selber für das Beenden sorgt? Also wenn ich es nie Abfrage, läuft mein Thread einfach bis zum Ende? Habe ich das richtig verstanden?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 15:15
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#8

Re: Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 15:28
Zitat von SirThornberry:
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.
#

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?
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 16:18
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.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Thread von Hauptunit abrechen

  Alt 25. Apr 2008, 17:52
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:26 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