AGB  ·  Datenschutz  ·  Impressum  







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

Thread abbrechen

Ein Thema von xZise · begonnen am 14. Mai 2007 · letzter Beitrag vom 15. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Thread abbrechen

  Alt 14. Mai 2007, 14:09
Wie kann ich den Thread abbrechen?
Ich habe es schon mit .Suspend versucht und auch mit einer Variable, aber das funktioniert nicht:
Delphi-Quellcode:
procedure Kill;
begin
  Thread.FKill := true;
  Thread.Suspend;
end;

procedure TThread.Bla;
begin
  while (not FKill) or (not Suspended) do
  begin
    ...
  end;
end;
Und "Bla" würde dann bei Execute aufgerufen werden...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von richie
richie

Registriert seit: 21. Apr 2006
Ort: Dresden
127 Beiträge
 
#2

Re: Thread abbrechen

  Alt 14. Mai 2007, 14:16
Delphi-Quellcode:
procedure Kill;
begin
  Thread.Terminate;
end;

procedure TThread.Bla;
begin
  while not Terminated do
  begin
    ...
  end;
end;
Hängt sich nicht aber das Programm durch TThread.Bla auf, wenn darin eine Schleife ausgeführt wird?
Robert
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Thread abbrechen

  Alt 14. Mai 2007, 18:16
Ne ^^ Deshalb ist es ja ein Thread und dient nur zum Neuzeichnen
Aber Terminate wäre unpraktisch, weil ich ihn wieder starten ".Resume" möchte.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Thread abbrechen

  Alt 14. Mai 2007, 18:56
OMFG... Entschuldigung für diesen Ausdruck, aber das war einfach nur... öhm... Dummheit
Es ist logisch, dass er nich abbricht, weil das Codebeispiel oben nicht ganz richtig ist!

Und zwar musste es heißen:
Delphi-Quellcode:
while FActive do
begin
  ...
  for ...
  begin
    if FKill then
      break; <!--- 1. Fehler, er verlässt nur die Schleife
  end;
end;

FActive := true <!--- 2. Fehler: Active ist nicht der zustand einer Checkbox
Aber dennoch habe ich die Frage, wie man nach "Suspend", den Thread wieder anschmeißen kann...
Wenn das mit Resume geht, dann wäre es nett es zu posten, weil er das nicht tut...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Apollonius

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

Re: Thread abbrechen

  Alt 14. Mai 2007, 19:27
Tja, eigentlich sollte es mit resume gehen. Hast du ihn zufällig mehrfach suspended? Dann musst du ihn auch genauso oft resumen.
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
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Thread abbrechen

  Alt 14. Mai 2007, 19:28
Es geht schon mit Resume; nur natürlich nicht ausm Thread heraus, weil der ja suspended ist. Btw. ist es imho sinnlos, im thread zu prüfen, ob es suspended ist - das sollte immer false geben
  Mit Zitat antworten Zitat
Benutzerbild von richie
richie

Registriert seit: 21. Apr 2006
Ort: Dresden
127 Beiträge
 
#7

Re: Thread abbrechen

  Alt 14. Mai 2007, 20:35
Zitat von xZise:
Deshalb ist es ja ein Thread
Aber wird nicht nur TThread.Execute als eigenständiger Thread ausgeführt? Das Programm müsste bei Bla doch hängen bleiben? Mich irritiert die while-Schleife
Robert
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Thread abbrechen

  Alt 14. Mai 2007, 22:09
1. Execute ruft "Bla" auf
2. Mit Resume scheints irgendwie nicht zu funktionieren...
Aber vielleicht liegt es auch an den Threadcode... Ich werde den morgen mal onlinestellen!
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
C.Schoch

Registriert seit: 2. Jan 2006
Ort: Wüstenrot
235 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Thread abbrechen

  Alt 14. Mai 2007, 22:36
Hi,
Du kannst den Thread sich nicht selbst Resumen lassen, da er ja Suspended ist und somit keine Code ausführt,das heist du musst den Thread aus einem anderen Thread Resumen.

z.B. so:

Delphi-Quellcode:
if Thread.Suspended then // nicht im Kontext von "Thread"
begin
  Thread.Resume
end;
Suspenden scheint ja zu klappen aber trotzdem nochmal:
Delphi-Quellcode:
if not Thread.Suspended then // kann im Kontext von Thread sein wobei du dir dann die Abfrage sparen kanst
begin
 Thread.Suspend;
end;
Beim Suspenden und Resumen solltes du aber sicherstellen, dass der Thread auch noch ausgeführt wird, da du sonst eine Exception bekommst.
Tschau Christian
Das System hofft auf Besserung
[Siemens]
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Thread abbrechen

  Alt 15. Mai 2007, 13:51
Also ich glaube es ist hier ein bisschen Unverständnis. Aufgrund dessen stelle ich den Code schon mal online.
Angehängte Dateien
Dateityp: pas miamilabel_409.pas (7,8 KB, 9x aufgerufen)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 02:25 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