2017-04-04 3 views
0

Es gibt einen Timer, der alle 24 Stunden eine Funktion aufruft. Diese Funktion liest eine Datei, um die Anzahl der verbleibenden Tage zu ermitteln, dekrementiert sie um 1 und schreibt die neuen verbleibenden Tage in dieselbe Datei zurück.Logik zur Behandlung der verbleibenden Tage beim Neustart

Problem: Wenn das System neu gestartet wird, wird der Zeitgeber (der auf die 24-Stunden-Markierung wartet) möglicherweise nicht aufgerufen, und das Schreiben in die Datei wird nicht ausgeführt. Wenn der Neustart beispielsweise jeden Tag vor dem 24-Stunden-Zeitraum stattfindet, werden die verbleibenden Tage niemals verringert.

Ich verwende C++ - Programm auf einem Linux-System.

Welche Logik ist erforderlich, um dieses Problem zu lösen.

+2

Warum müssen Sie die verbleibenden Tage (bis?) Überhaupt zählen? Kannst du nicht einfach das Datum X speichern? –

+0

@AndreyTurkin Dies dient zum Verfolgen der Anzahl von Tagen, bis ein anderes Ereignis eintreten sollte. Das Ereignis sollte nicht passieren, bis "X" Tage verstrichen sind. Diese 'X' Tage werden in einer Datei initialisiert. –

+0

Ich stimme @AndreyTurkin zu, Speichern des Enddatums und Berechnung der verbleibenden Tage basierend auf dem wäre ein robusteres System und würde dieses Problem vermeiden – vu1p3n0x

Antwort

0

IMHO, der beste Weg wäre, das Datum des letzten Auftretens des anderen Ereignisses zu speichern und jedes in Ihrer täglichen Funktion zu vergleichen. Oder speichern Sie direkt das neue Datum (altes Datum + X Tage) und testen Sie es direkt. Auf diese Weise wären Sie gegen Neustarts immun, vorausgesetzt Sie testen es auch beim Booten.

Als Alternative, wenn Sie eine verbleibende Anzahl von Tagen weiter bearbeiten müssen, können Sie den Zeitpunkt der letzten Änderung der Datei überprüfen. Ein guter Hinweis für die Anzahl der zu entfernenden Tage wäre der Wert von (last_time - current_time + 12 Stunden)/24 Stunden. Es sollte mehrere Tage ohne Aktivierung und sogar mehrere Aktivierungen in wenigen Stunden akzeptieren. Sie sollten jedoch bei manuellen Aktionen dieser Datei sehr vorsichtig sein, z. B. bei einer Wiederherstellung nach einem schwerwiegenden Vorfall, und sicherstellen, dass der Inhalt der Datei mit der Änderungszeit übereinstimmt. DRACHEN LIEBEN DORT ...

+0

Der zweite Absatz scheint der Weg zu sein, den ich nehmen sollte. Aber funktioniert das, wenn die Systemzeit geändert wird? –

+0

@nitin_cherian: Wenn die Systemzeit gerade angepasst wird, sogar um mehrere Minuten oder sogar eine volle Stunde, wenn Sie DST so verwalten sollten, sollte es immer noch in Ordnung sein. Aber wenn es einen Fehler gibt und die Systemzeit um Tage oder Jahre abgelaufen ist, kann alles passieren. Als Sicherheitsmaßnahme sollte die Funktion mit einer Fehlermeldung abbrechen, wenn das Delta größer als 5 oder 10 Tage ist, und eine Warnung protokollieren, wenn sie sich von 1 Tag unterscheidet. –

+1

Es ist gefährlich, Sicherheitsratschläge zu geben, ohne den Kontext zu kennen. Wir können nicht davon ausgehen, dass der OP keinen Code für ein Atommülldepot oder medizinische Ausrüstung schreibt. "Abbruch mit einer Fehlermeldung" ist sicher nicht immer eine ausfallsichere Option. – sehe

Verwandte Themen