Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Timer im Hintergrund Thread (https://www.delphipraxis.net/215903-timer-im-hintergrund-thread.html)

DelphiUser123 23. Sep 2024 20:27

Timer im Hintergrund Thread
 
Hallo liebes Forum.
Folgendes Problem: Ich möchte, dass eine Timer Geschichte in einem Hintergrund Thread arbeitet. Eigentlich wäre es eine Möglichkeit mit Endlosschleifen zu arbeiten, dies funktioniert aber bei mir nicht, weswegen ich es über Timer realisieren will. Es funktoniert bisher mit dem Timer, jedoch lediglich im Hauptprogramm.

Hier mein bisheriger Rahmencode (mit nicht funktionierender Endlosschleife):
Code:


type
  TMyThread = class(TThread)
    procedure Execute; override;
  end;

type
  TForm33 = class(TForm)



procedure TMyThread.Execute;
begin
 
  while true do begin
  Sleep(1000);
   try …

    {längerer zu wiederholender Threadcode}
   
   except …
 
  end;
end;

...

procedure TForm33.FormCreate(Sender: TObject);
var MyThread: TMyThread;
begin
    MyThread := TMyThread.Create(False); // startet sofort

end;

Medium 23. Sep 2024 20:34

AW: Timer im Hintergrund Thread
 
Was genau "funktioniert denn nicht"?

Im übrigen ist es im Execute() besser, seine "Endlos-"Schleifen mit
Delphi-Quellcode:
while not (self.)Terminated do ...
zu "rahmen", da der Thread sonst nie terminieren kann - auch nicht, wenn es ihm von außen gesagt wird.

(Delphi VCL) TTimer: Geht nicht, weil der auf Window-Messages basiert, die nur vom Hauptthread verarbeitet werden.

DelphiUser123 23. Sep 2024 20:48

AW: Timer im Hintergrund Thread
 
Zitat:

Zitat von Medium (Beitrag 1541432)
Was genau "funktioniert denn nicht"?

Der Code wird nicht wiederholt, sondern läuft nur einmal ab. Es handelt sich um einen kontinuierlichen Check ob eine bestimmte USB Stick Datei vorhanden ist, falls nicht, schließt das Programm.

stahli 23. Sep 2024 20:59

AW: Timer im Hintergrund Thread
 
Auf jeden Fall nur Timer ODER Thread.

Timer ist einfacher. Wenn es sich damit gut lösen lässt und die Aktion im Timer keine hohe Last auslöst, dann nimm ihn.

Ansonsten einen Thread (die Details wären dann noch genauer abzustimmen).

Medium 23. Sep 2024 21:03

AW: Timer im Hintergrund Thread
 
Zitat:

Zitat von DelphiUser123 (Beitrag 1541435)
Zitat:

Zitat von Medium (Beitrag 1541432)
Was genau "funktioniert denn nicht"?

Der Code wird nicht wiederholt, sondern läuft nur einmal ab. Es handelt sich um einen kontinuierlichen Check ob eine bestimmte USB Stick Datei vorhanden ist, falls nicht, schließt das Programm.

Könnte dann ggf. das selbe Problem wie mit dem TTimer im Thread sein, wenn deine Methode für diesen Check ebenfalls nicht threadtauglich ist. Wenn, wie durchaus denkbar z.B. auch dort Messages genutzt werden. Aber ohne genau zu wissen, was du da im einzelnen für programmiert hast, bleiben wir beim Rätselraten.

jaenicke 23. Sep 2024 21:33

AW: Timer im Hintergrund Thread
 
Vermutlich machst du in dem Code etwas, das nicht im try..except abgefangen wird. Dafür kann man z.B. den ErrorMode anpassen.

Die Frage ist, was du da machst.

Was passiert denn im Debugger?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz