Routine in einem zeitlichen Intervall aufrufen



  • Hallöchen,

    ich habe mal eine grundsätzliche Frage an Euch. Ich möchte zu bestimmten Uhrzeiten eine Prozedur innerhalb meines Programms aufrufen. Mein Programm soll quasi den ganzen Tag über laufen und halt zu bestimmten Uhrzeiten eine Tätigkeit ausüben.

    Wie würdet Ihr das programmieren? Mit einer Timer-Komponente? Okay, die kennt natürlich die aktuelle Uhrzeit nicht...
    Oder gibt es da schon eine Komponente, die das vielleicht kann?

    Tausend Dank schon mal im Voraus.

    CQ.



  • Hi,

    ich würde das Ganze folgendermaßen machen:

    1. Pack ´nen Timer aufs Formular mit 1000-er Intervall.

    2. Benutze diesen Code um die aktuelle Systemzeit auszulesen und setze ihn in die Timer-Funktion

    StringVariable = FormatDateTime("yyyy':'mm':'dd':'hh':'nn':'ss':'zzz", Now());
    

    3. Vergleiche mit einer if-Abfrage in der Timer-Funktion ständig die aktuelle Zeit mit der gewünschten Zeit und rufe die Funktion auf, sobald die gewünschte Zeit erreicht ist.

    Ich hoffe, das war ausführlich genug.

    Gruß
    ravel



  • Beim Programmstart die aktuelle Uhrzeit ermitteln (siehe z.B. TDateTime), die Sekunden bis zur gewünschten Uhrzeit ausrechnen und das Timer-Intervall entsprechend einstellen. Im OnTimer stellst du das Intervall dann auf 24 Stunden.



  • @Jansen: Diesen Weg finde ich etwas gefährlich, da sich ungeschickter Weise Zeitkorrekturen nichtmehr einrechnen lassen... Ich würde den Interval kürzer wählen... <= 15min oder so...

    -junix



  • Da hast du natürlich recht.
    Allerdings sollte man sich beim Intervall wohl danach richten, wie genau der Startzeitpunkt eingehalten werden muss. Wenn man es recht betrachtet kommt man um die eine Sekunde kaum herum.

    Allerdings verspüre ich eine instinktive Abneigung gegen die ständige Abfragerei, sozusagen eine Poll(en)-Allergie. 🙂
    Ich frage mich, wie crond das wohl macht?


  • Mod

    Hallo

    einfach per API SetTimer verwenden (letzter Parameter "TIMERPROC")

    MfG
    Klaus



  • Meines Wissens benutzt TTimer intern selbst SetTimer, ich sehe also nicht, wie du mit der reinen API-Lösung eine eventuelle Änderung der Systemzeit während der Programmausführung (besser) abfangen willst.


Anmelden zum Antworten