2017-04-04 47 views
0

有一個定時器每24小時調用一次函數。該函數讀取一個文件以獲得剩餘天數,將其減1並將新的剩餘天數寫回到同一文件。用於處理重啓時的剩餘日期的邏輯

問題:如果系統重新啓動,定時器(等待在24小時標記處觸發)可能不會被調用,寫入文件也不會發生。例如,如果在24小時之前每天都有重新啓動,則剩餘的日期將永遠不會減少。

我在Linux系統上使用C++程序。

處理這個問題需要什麼邏輯。

+2

爲什麼你需要計算剩餘天數(直到?)呢?你不能只存儲日期X? –

+0

@AndreyTurkin這用於跟蹤直到另一個事件發生的天數。直到說'X'日已過,事件就不會發生。這'X'日將在文件中初始化。 –

+0

我同意@AndreyTurkin的存儲結束日期和計算剩餘天數的基礎上,這將是一個更強大的系統,並會避免此問題 – vu1p3n0x

回答

0

恕我直言,最好的方法是存儲其他事件最後發生的日期,並比較每天的功能。或者直接存儲新日期(舊日期+ X天)並直接進行測試。這樣,如果您在啓動時進行測試,那麼您將無法重新啓動。

作爲替代方案,如果您必須繼續處理剩餘天數,則可以檢查文件的上次修改時間。對於要移除的天數,一個很好的提示是(last_time - current_time + 12小時)/ 24小時的值。它應該在幾個小時內接受幾天而不激活甚至幾次激活。但是,您應該對該文件的手動操作非常謹慎,包括重大事件後的恢復,以及確保文件的內容與其修改時間一致。 DRAGONS LIE ...

+0

第二段似乎是我應該採取的方式。但是,如果系統時間被修改,這是否工作? –

+0

@nitin_cherian:如果系統時間剛剛調整,即使是幾分鐘甚至一個整小時,如果您要以這種方式管理DST,它應該仍然可以。但是,如果出現錯誤並且系統時間在幾天或幾年內發生任何事情,都可能發生。作爲一種安全措施,如果增量大於5或10天,函數應該中止並顯示錯誤消息,並且如果與1天不同則會記錄警告。 –

+1

在不知情的情況下提供「安全」建議是危險的。我們不能假定OP沒有爲核廢料倉庫或醫療設備編寫代碼。 「中止並顯示錯誤消息」當然不總是一個安全防護選項。 – sehe