Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: TThread Suspend und Resume

  Alt 15. Sep 2016, 09:52
Die Execute-Methode wird nur einmal ausgeführt.
Ist die durch, dann ist der Thread fertig und kann nicht wieder neu gestartet werden.

Fazit: Eine Schleife einbauen
Grund: Das zweite Resume setzt den Thread nach dem "Suspend" fort und der Thread beendet sich dann, da er danach nichts mehr zu tun hat.

Aber ich würde eher vom Pausieren abraten und stattdessen irgendein "WaitFor" da hin tun und dann mit Events abeiten. (Thread wartet, bis Event gefeuert wird)
Also mit Pausieren funktionierts jetzt bei mir ganz gut, die Schleife war ja schon da:
Delphi-Quellcode:
procedure TmyThreadObject.Execute;
var
   E: TmyAction;
begin
  while not Terminated do begin
    if Actions.Count = 0 then begin
      Sleep(1000);
      Continue;
    end;
    E:= Actions[0];
    // Do some Code
  end;
end;
Was sind denn jetzt die Vor- und Nachteile von Sleep und WaitFor?

EDIT: Die Vorgehensweise innerhalb der Execute-Methode erinnert mich inzwischen stark an die Entwicklung von Systemdiensten, die man auch in eine bedingte Schleife schickt.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (15. Sep 2016 um 09:56 Uhr)
  Mit Zitat antworten Zitat