![]() |
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 |
Re: Timer für "threaded environments"
Da reicht doch eine einfache Sleep-Funktion:
Delphi-Quellcode:
Der Thread wacht ungefähr einmal in der Sekunde auf und schaut, ob er selbst terminiert wurde
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; 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. |
Re: Timer für "threaded environments"
'loha,
das hört sich natürlich auch gut an. Vielen Dank und Grüsse hirnstroem |
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