Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread anhalten / pausieren (https://www.delphipraxis.net/134653-thread-anhalten-pausieren.html)

schismatic1 26. Mai 2009 12:50


Thread anhalten / pausieren
 
Mahlzeit :)

Ich bastel aktuell an einem simplen Downloadmanager der für meine Bedürfnisse zurechtgeschnitten ist. Mitlerweile funktioniert der auch nur möchte ich ihn erweitern indem der Download in einem eigenen Thread läuft.

Da ich mich damit noch nicht auskenne habe ich mich ersteinmal durch dutzende Forenbeiträge und Tuts gewälzt und nun ersteinmal ein Tetsprogramm gebaut welches in einem Thread eine Schleife startet (spätere Download soll auch wiederholt werden) und den aktuellen Schleifendurchlauf wieder zurücksendet.

Zu meinem Glück fehlt nun nur noch die Möglichkeit die Schleife zu pausieren und wieder aufzuwecken.

Dazu habe ich folgendes versucht:

Delphi-Quellcode:
procedure TForm3.PauseClick(Sender: TObject);
begin
  try
    if Schleife.Resume then
      Schleife.Suspended
    else
      Schleife.Resume
  except
  end;
end;
Der Compiler schreit danach das 'Schleife.Resume' vom Typ boolean sein muss - eine Abänderung auf ' if (if Schleife.Resume = true) then ' funktioniert auch nicht wegen "Inkompatible Typen".


PS: Schleife ist eine Klasse vom Typ TSchleife (also meine Threadklasse heißt TSchleife)

DeddyH 26. Mai 2009 12:55

Re: Thread anhalten / pausieren
 
Delphi-Quellcode:
procedure TForm3.PauseClick(Sender: TObject);
begin
  try
    if Schleife.Suspended then
      Schleife.Resume
    else
      Schleife.Suspend;
  except
    //was soll denn das hier?
  end;
end;

jaenicke 26. Mai 2009 12:57

Re: Thread anhalten / pausieren
 
Überlege dir einmal was du machst...
Resume ist eine Prozedur, die den Thread fortsetzt, die gibt aber nix zurück. Suspended ist eine Eigenschaft, die angibt, ob der Thread gerade pausiert ist...

Zudem brauchst du an der Stelle kein try..except, es sei denn deine Threadvariable kann nil sein und das solltest du besser richtig abfangen.

Wie es richtig ist, hat DeddyH ja schon geschrieben wie ich sehe, ich hoffe du verstehst auch was da anderes passiert und was bei dir falsch war...

schismatic1 26. Mai 2009 13:00

Re: Thread anhalten / pausieren
 
Okay danke an Euch beiden - Für Richtigstellung und Erklärung :dp:

EDIT: zu der exception - Wenn ich die rauslasse und auf meinen Pauseknopf drücke sobald die Schleife durch ist kommt eine Fehlermeldung "Thread Fehler: Das Handle ist ungültig (6)" - ich denke mal das liegt daran dass der Thread nicht mehr exisiert nachdem er fertig gezählt hat.

sirius 26. Mai 2009 13:02

Re: Thread anhalten / pausieren
 
Es ist aber ungünstig den Thread von außen mit Suspend anzuhalten. Gib dem Thread lieber eine Mitteilung, dass er sich selber anhalten soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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