2015-10-02 67 views
2

我寫了一個全天候運行並收集傳感器數據的Windows C#應用程序,將它存儲在數據庫中。如何驗證您的應用程序整天運行?

每天晚上一次,我對前一天的數據運行一些算法。如果應用在整個前一天沒有重大突破(即休息超過5分鐘將導致當天結果無用),結果纔有用。

任何想法如何確保應用程序一直運行在一天沒有重大突破?

  • 解決方案應該工作,即使應用程序/ Windows崩潰和重啓
  • 很可能有很長一段時間沒有感覺的數據,即使應用程序正在運行

第一想法

  • 增加一個dat每分鐘爲當天計數。如果計數器達到最大1440減去公差(60分鐘x 24小時),該應用程序整天都在運行。看起來很複雜,每天都需要一個櫃檯。從夏天到冬天的時間會改變頭痛...
+0

當您獲取傳感器數據時,您不能只保存時間戳嗎? – metacircle

+0

@metacircle我得到了那個時間戳,但它並不能幫助我知道是否有當天可用的所有數據。它沒有告訴我該應用程序是否在運行。每分鐘寫一個日誌文件 – nabulke

+0

。 –

回答

3

堅持以下兩個變量(一個數據庫,文件,無論你想):

  1. 整數。這將是您的離線最大秒數
  2. A 時間戳。這將是您的上次心跳這需要是UTC,以使其防止DST。

讓你的應用程序每對夫妻秒以下:

  1. 閱讀最後時間戳
  2. 將其與當前(UTC)時間戳進行比較。
  3. 如果差異大於整數,則更新整數
  4. 用當前UTC時間戳更新時間戳

每天都要手動檢查時間戳。如果您這樣做,請將其重置爲零。

+0

偉大的UTC提示。我也喜歡這個解決方案。現在考慮任何漏洞...... – nabulke

+0

現在我能想到的唯一弱點是系統時鐘被混淆,但我沒有看到這種情況發生在任何現代(或最低限度的強大)系統上。此外,這個問題會影響任何基於心跳的解決方案,就我所能想象的那樣(包括您提出的日誌文件和數據庫計數器)。 –

3

這取決於你想要發生什麼。只是我的頭頂幾個快速的想法。

如果您想重新啓動應用程序 - 您可以創建一個旨在確保進程正在運行的Heartbeat Windows服務。如果它沒有運行,你可以讓它重新啓動過程。

如果您只需要/想驗證數據。讓應用程序向數據庫報告健康狀況檢查,並將其用作整個時間的「在這裏」。

+0

我只需要提供數據,重新啓動不是問題。您能否詳細說明您的「舉報健康檢查」的含義? – nabulke

相關問題