Hallo zusammen,
Aufgabenstellung war, zu einem dedizierten Zeitpunkt, der im UI via Datums- und Uhrzeit-Eingabe angegeben wird, eine Aktion zu starten.
Mein erster Versuch mit delay() war vollkommen unbrauchbar. delay() ist bereits nach einigen Minuten relativ ungenau und weicht nach einigen Stunden um Minuten vom Zielzeitpunkt ab. Das hatte nichts mehr mit dem eingegebenen Wunschtermin zu tun.
Daher griff ich auf htime() zurück. Hier stellte ich mir vor, eine "Funktion" zu schreibn, die ähnlich wie htime() aussieht und arbeitet, das heißt, ein Ereignis zum besagten Zeitpunkt erzeugt (Änderung auf 1b01, dann zurück auf 0b01).
Das Datum liegt aus dem UI kommend als YYYY-MM-DD, die Uhrzeit als HH:MI:SS vor.
Das Ergebnis ist
Es wird an jedem Tag zur gegegeben Uhrzeit geprüft, ob es auch der richtige Tag ist, und falls ja, das Ereignis 1b01 via return geliefert, das nach einer Hunderstel (delay(..., 10u64)) wieder auf 0b01 zurückgesetzt wird.
Das funktioniert.
Mich interessiert, ob es bessere Lösungen gibt.
Mich wurmt ein wenig, dass htime() sinnloserweise jeden Tag zuschlägt, obwohl das Datum bereits lange zurückliegen kann. Und das Erzeugen des Ereignisses mit delay() wirkt auf mich unelegant.
Viele Grüße
Aufgabenstellung war, zu einem dedizierten Zeitpunkt, der im UI via Datums- und Uhrzeit-Eingabe angegeben wird, eine Aktion zu starten.
Mein erster Versuch mit delay() war vollkommen unbrauchbar. delay() ist bereits nach einigen Minuten relativ ungenau und weicht nach einigen Stunden um Minuten vom Zielzeitpunkt ab. Das hatte nichts mehr mit dem eingegebenen Wunschtermin zu tun.
Daher griff ich auf htime() zurück. Hier stellte ich mir vor, eine "Funktion" zu schreibn, die ähnlich wie htime() aussieht und arbeitet, das heißt, ein Ereignis zum besagten Zeitpunkt erzeugt (Änderung auf 1b01, dann zurück auf 0b01).
Das Datum liegt aus dem UI kommend als YYYY-MM-DD, die Uhrzeit als HH:MI:SS vor.
Das Ergebnis ist
Code:
:begin dhtime(DatumStr, UhrzeitStr)
:var ereignis@
ereignis@ = 0b01
if htime(convert(split(UhrzeitStr, 0u16, 1u16), 0u08), convert(split(UhrzeitStr, 3u16, 4u16), 0u08), convert(split(UhrzeitStr, 6u16, 7u16), 0u08)) then {
if DatumStr == split(localtimeconvert(utctime()), 0u16, 9u16) then ereignis@ = 1b01; endif;
} endif;
if delay(ereignis@ == 1b01, 10u64) then ereignis@ = 0b01; endif;
:return ereignis@
:end
Das funktioniert.
Mich interessiert, ob es bessere Lösungen gibt.
Mich wurmt ein wenig, dass htime() sinnloserweise jeden Tag zuschlägt, obwohl das Datum bereits lange zurückliegen kann. Und das Erzeugen des Ereignisses mit delay() wirkt auf mich unelegant.
Viele Grüße



Kommentar