AGB  ·  Datenschutz  ·  Impressum  







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

Thread vorzeitig beenden

Ein Thema von DarkItachi · begonnen am 23. Mai 2010 · letzter Beitrag vom 23. Mai 2010
Antwort Antwort
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#1

Thread vorzeitig beenden

  Alt 23. Mai 2010, 16:08
Gutentag,

Ich möchte mein Thread gerne beenden können, d.h. die Operation vorzeitig abbrechen können.
Dabei hat mein Thread die Funktion in TMyThrd.Execute
Delphi-Quellcode:
[...]
begin
   For I:= 1 to param1 do begin //param1 kann manchmal über 100.000 sein, deswegen soll man das abbrechen können
     [...]
   end;
 Destroy; //Wenn fertig, dann wird abgebrochen
end;
Ich habe es bereits versucht mit, while not terminated do begin
aber es nützt nichts.
Der Thread arbeitet immer weiter bis er fertig ist.

Auch wenn man die Anwendung beendet, erhält man ein Systemfehler(wenn Thread noch nicht fertig)

Hat jemand eine Idee?
Developer since age 14
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: Thread vorzeitig beenden

  Alt 23. Mai 2010, 16:16
.Terminate setzt nur ein Bit, welches der Programmierer auswerten muß.
(dieses wird auch in jedem guten Thread-Tutorial gezeigt)
Delphi-Quellcode:
// in Execute
begin
  while not Terminated do begin
    [...]
  end;
end;
In deinem Fall also:
Delphi-Quellcode:
begin
  FreeOnTerminate := True; // statt Destroy
  For I := 1 to param1 do begin
    if Terminated then Break;
    [...]
  end;
end;
Zitat:
Ich habe es bereits versucht mit, while not terminated do begin
Und wie hattest du das versucht?


Destroy ruft man nicht direkt auf.
Dafür gibt es Free und ein Objekt löschen, wärend dieses verwendet wird, ist ebenfalls Unklug.
PS: Nach dem Ende von Execute wird noch einiges im Thread erledigt, demnach würdest du mit Destroy dem Threrad sein Objekt (sich selber) unterm Arsch weglöschen, was welches gut enden kann.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Thread vorzeitig beenden

  Alt 23. Mai 2010, 16:51
Zitat von DarkItachi:
Ich habe es bereits versucht mit, while not terminated do begin
aber es nützt nichts.
Der Thread arbeitet immer weiter bis er fertig ist.
Mal ganz dumm gefragt:
Hast du denn DeinThread.Terminate; aufgerufen?
Wahrscheinlich hast du das gemacht, aber es hört sich genau danach an als hättest du das nicht gemacht, deshalb frage ich lieber mal.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Thread vorzeitig beenden

  Alt 23. Mai 2010, 19:07
Danke an alle..
@Jaenicke--> Ja klar, habe ich! ^^ Hätte ich im thread schreiben sollen! lol

Gute Idee mit Break;

Thx
Developer since age 14
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Thread vorzeitig beenden

  Alt 23. Mai 2010, 20:16
Dann muss es aber auch mit der while Schleife gehen. Vorausgesetzt die einzelnen Durchläufe dauern nicht zu lange.

Ah, Moment... du hast das doch nicht so gemeint?
Delphi-Quellcode:
while not Terminated do
  for i := 1 to param1 do
  begin
    ...
So geht es jedenfalls sicher:
Delphi-Quellcode:
i := 1;
while not Terminated do
begin
  ...
  Inc(i);
end;
Aber hier ist for + Break natürlich auch passend.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

Re: Thread vorzeitig beenden

  Alt 23. Mai 2010, 20:28
Zitat von jaenicke:
So geht es jedenfalls sicher:
@jaenicke: Du meinst es bestimmt so?
Delphi-Quellcode:
i := 1;
while (i <= param1) and not Terminated do
begin
  ...
  Inc(i);
end;
(die andere Abbruchbedingung nicht vergessen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Thread vorzeitig beenden

  Alt 23. Mai 2010, 20:30
Man kann ja mal was vergessen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  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 20:48 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