Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Timer für "threaded environments" (https://www.delphipraxis.net/82701-timer-fuer-threaded-environments.html)

hirnstroem 18. Dez 2006 14:42


Timer für "threaded environments"
 
'loha Folks,

ich bin auf der Suche nach einer Möglichkeit in IntraWeb (threaded environment) einen Timer laufen zu lassen, welcher Rund um die Uhr, alle fünf Minuten etwas macht.

Nun kann, wie ich bereits herausgefunden habe, kein normaler Timer benutzt werden, denn dieser läuft nicht so wirklich.

Ich würde wohl beim Programmstart einen neuen Thread kreieren, welcher solange lebt wie die Applikation läuft und nichts anderes macht, als wiederholend knapp fünf Minuten zu schlafen und dann eine gewisse Funktion aufzurufen (es muss hunderten von Geräten, welche an einem CAN-Bus angeschlossen sind die Uhrzeit mitgeteilt werden, weil diese Geräte über einen viel zu ungenauen Quarzbaustein verfügen).

Ist dies empfehlenswert? Oder gäbe es bessere Varianten?

Vielen Dank und Grüsse
hirnstroem

shmia 18. Dez 2006 15:07

Re: Timer für "threaded environments"
 
Da reicht doch eine einfache Sleep-Funktion:
Delphi-Quellcode:
const
   DELAYTIME=(1.0/24.0/60.0*5); // 5 Min
var
   nextrun : TDatetime;

nextrun := Now+DELAYTIME;
while True do
begin
   Sleep(1000);
   if Terminated then Exit;
   if Now > nextrun then
   begin
      nextrun := Now+DELAYTIME;
      // und hier findet nun die grosse Aktion statt
      ...
      if Terminated then Exit;
   end;
end;
Der Thread wacht ungefähr einmal in der Sekunde auf und schaut, ob er selbst terminiert wurde
und ob es schon Zeit ist, die Aktion auszuführen.
Nach der Aktion wird nochmals geschaut ob der Thread schon terminiert ist, denn wir möchten
ja nicht eine weitere Sekunde warten.

hirnstroem 19. Dez 2006 10:03

Re: Timer für "threaded environments"
 
'loha,

das hört sich natürlich auch gut an.

Vielen Dank und Grüsse
hirnstroem

radekj 19. Dez 2006 10:27

Re: Timer für "threaded environments"
 
Was ist normaler Timer ?

ciao
Radek


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