AGB  ·  Datenschutz  ·  Impressum  







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

Thread beenden, bessere Möglichkeit

Ein Thema von Brainstalker · begonnen am 24. Nov 2005 · letzter Beitrag vom 25. Nov 2005
Antwort Antwort
Benutzerbild von Brainstalker
Brainstalker

Registriert seit: 9. Jan 2004
Ort: Berlin
176 Beiträge
 
Delphi 2009 Professional
 
#1

Thread beenden, bessere Möglichkeit

  Alt 24. Nov 2005, 22:04
Gut also ein "Problem" vor dem ich länger stehe ist, dass ich nicht genau weiß wie ich meinen Thread beenden soll.

Ich erstelle in meiner Anwendung einen Thread mit der VCL-Thread-Klasse TThread. Dann werden dem Thread einige Dinge übergeben und er wird gestartet. Dem benutzer soll nun aber auch die Möglichkeit gegeben werden den Thread zu beenden. Also dachte ich mir ich setz die Eigenschaft Terminated auf true und beende den Thread dann.

So jetzt zum eigentlichen Problem. Der Thread führt viele Sachen nacheinander aus, das heißt es ist keine Schleife. Das bedeutet, das ich nach jedem Größeren Abschnitt und/oder in jeder Schleife (kommen welche in einigen Abschnitten vor) prüfen muss ob der Thread "beendet" ist. Meiner Meinung nach ist das ein bisschen viel, nur um einen Thread zu beenden. Aber mir würde spontan nichts anderes einfallen.
Zum anderen soll der Thread beendet werden, wenn ein Fehler (Warnung) entsteht, dafür müsste ich auch jedes mal Prüfen, ob bereits ein Fehler (Warnung) enstanden ist oder nicht.

Gibt es da noch eine andere Möglichkeit den Thread zu beenden? Ich finde diese Methode nicht besonders effizient und verursacht einiges an zusätzlichem Code. Wenn das bereits die beste Möglichkeit ist, muss ich sie akzeptieren. Ansonsten such ich nach einer anderen.
TerminateThread würde ich nicht so gern benutzen weil das einfach eine Vergewaltigung für den Thread ist und wenn ich meine Anwendung beende, bekomm ich meistens AVs und das ist nicht so geschickt.


MfG Brainstalker
Michael N.
Brainstalker
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Thread beenden, bessere Möglichkeit

  Alt 25. Nov 2005, 08:24
Ich glaube nicht, dass du eine bessere Möglichkeit finden wirst, und bzgl. TerminateThread stimme ich dir zu. Das einzige was mir einfallen würde, um den zusätzlichen Code ein bisschen zu beschränken wäre, diesen in eine Extra-Methode auszulagern
Delphi-Quellcode:
function TMyThread.ShouldTerminate: boolean;
...
Aber darauf bist du vermutlich schon selbst gekommen.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von Brainstalker
Brainstalker

Registriert seit: 9. Jan 2004
Ort: Berlin
176 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Thread beenden, bessere Möglichkeit

  Alt 25. Nov 2005, 14:45
Hab mir schon fast gedacht das eine solche Antwort kommt. Ich muss mich warscheinlich damit abfinden. Ja das mit einer eigenen Funktion zum zusammenfassen ist mir auch bereits in den Sinn gekommen. Das wäre warscheinlich auch noch das vernünftigste. Naja mal sehen, vielleicht schreibt noch jemand was.
Trotzdem vielen Dank!
Michael N.
Brainstalker
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Thread beenden, bessere Möglichkeit

  Alt 25. Nov 2005, 14:53
if würde auch einfach immer zwischen den einzelnen Abschnitten ein
Delphi-Quellcode:
if Terminated then
 exit;
oder sowas einbauen
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Thread beenden, bessere Möglichkeit

  Alt 25. Nov 2005, 15:00
Das würde ja dann das Kriterium Fehler/Warnung nicht mitbekommen.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Thread beenden, bessere Möglichkeit

  Alt 25. Nov 2005, 15:08
Zitat:
oder sowas einbauen
Ich meinte damit einfach eine Lösung, in Form einer Abfrage oder einer Prozedur oder so in dem Thread, die anstelle von Terminate aufgerufen wird, die den Fehler/Warnung behandelt und den Thread dann beendet. Diese kann JEDERZEIT von dem Programm aus aufgerufen werden und wird dann denke ich auch sofort ausgeführt.
Delphi-Quellcode:
procedure TMyThread.ShouldTermiante;
begin
bla
bla
destroy/terminate oder so
end;
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Brainstalker
Brainstalker

Registriert seit: 9. Jan 2004
Ort: Berlin
176 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Thread beenden, bessere Möglichkeit

  Alt 25. Nov 2005, 15:37
Das Problem ist, die Fehler entstehen zwar im Thread, aber ich kann nicht immer sofort darauf reagieren. Der Thread wird dann auch weiter ausgeführt (ja das soll so sein) und die Fehler zum einen in nem Counter gespeichert und auch die Fehlermeldungen mitgeloggt. Der Hauptthread weiß also nicht, das der Thread einen Fehler verursacht hat.
Wenn ich den Thread wegen eines Fehlers beenden will muss das im Thread geschehen. Da werde ich versuchen, sobald ein Fehler entsteht den Thread abzubrechen. Wobei dies warscheinlich nicht direkt möglich ist.

Wenn der Thread nun aus dem Mainthread beendet wird, nach dem der Benutzer auf abbrechen geklickt hat, muss ich dem Thread sagen das er beendet werden soll. Kein Problem, aber dann muss ich ja im Thread überprüfen ob er beendet werden soll. Oder kann ich aus dem Hauptthread einfach ne Methode des Threads aufrufen, die dann sofort ausgeführt wird? Eigentlich führt doch der Thread zuerst all seine Aufgaben aus und dann neue. Oder sehe ich das falsch? Wenn das so richtig ist, müsste ich doch trotzdem zwischen den Blöcken bzw. in den Schleifen abfragen. Was ich ja gerade vermeiden will.
Michael N.
Brainstalker
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:39 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