Timer, bzw. ausführen zu bestimmter Zeit

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    Timer, bzw. ausführen zu bestimmter Zeit

    Hallo Leute,

    brauch mal wieder eure Hilfe.

    Folgendes:

    Ich hab einen Timer der sekündlich Tickt, und jede sekunde abfragt, ist es 16:00:00 Uhr dann tu das, ist es 17:00:00 Uhr dan tu das
    und zusätzlich zu jeder vollen und halben minute eine aufgabe ausführt wo er daten von einem server lädt, diese vergleicht und eine Mail versendet.
    das funktioniert soweit eigentlich alles. die einzelnen aufgaben sind jeweils ein eigener backgroundworker.
    Die Aufgabe zu jeder vollen und halben sekunde prüft er auch ob der Backgrounbdworker busy ist.

    Jetzt das problem:
    es kommt öfters vor das plötzlich in dem tick event nichts mehr ausgeführt wird. Das dauert so zwischen 30-50 minuten und danach gehts wieder normal weiter.

    liegt das am timer da er nicht präzise jede sekunde ausgibt und daher die aufgabe übersprungen wird? und wenn ja wie kann ich das lösen? bzw gibt es eine bessere lösung um aufgaben zu bestimmten uhrzeiten auszuführen?

    danke!

    republicx schrieb:

    liegt das am timer da er nicht präzise jede sekunde ausgibt und daher die aufgabe übersprungen wird?
    http://stackoverflow.com/questions/9228313/most-accurate-timer-in-net

    republicx schrieb:

    gibt es eine bessere lösung um aufgaben zu bestimmten uhrzeiten auszuführen?
    Muss das denn GENAU im Punkt 16:00 und 17:00 passieren?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @republicx,

    schau dir mal das an.

    Jobs are scheduled to run when a given Trigger occurs. Triggers can be created with nearly any combination of the following directives:

    at a certain time of day (to the millisecond)
    .
    .
    .
    .


    Gruss

    mikeb69

    Radinator schrieb:

    republicx schrieb:

    liegt das am timer da er nicht präzise jede sekunde ausgibt und daher die aufgabe übersprungen wird?
    http://stackoverflow.com/questions/9228313/most-accurate-timer-in-net

    republicx schrieb:

    gibt es eine bessere lösung um aufgaben zu bestimmten uhrzeiten auszuführen?
    Muss das denn GENAU im Punkt 16:00 und 17:00 passieren?


    nein kann auch ein paar sekunden oder minuten danach erfolgen. Mein Ansatz ist jetzt

    VB.NET-Quellcode

    1. If TimeOfDay > "16:00:00" and TimeOfDay < "16:00:05" and VormerkeSenden = False Then
    2. ausführender code...
    3. VormerkeSenden = True
    4. End If


    Die Variable "VormerkeSenden" wird jeweils im Mitternacht wieder auf false gesetzt da die aktion nur 1 mal am Tag geschieht

    republicx schrieb:

    VB.NET-Quellcode

    1. If TimeOfDay > "16:00:00" and TimeOfDay < "16:00:05" ...
    Du vergleichst hier alphanumerische Ausdrücke. Lass das sein :!:
    Arbeite mit den DateTime-Werten selbst, die haben auch die Vergleichsoperatoren überladen.
    Und:
    Wenn Du eine Toleranz von +-5 Sekunden zulässt, musst Du nicht im 1-Sekunden-Takt pollen, da genügt ein 8-oder 9-Sekunden-Takt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    republicx schrieb:

    kann auch ein paar sekunden oder minuten danach erfolgen
    Dann versuch doch nicht auf Sekunden genau zu vergleichen. Mach das dann halt mit Stunden und Minuten
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell