2017-10-18 68 views
-3

我正在爲某些監控目的設計一個類。所以,我希望它在每個x小時後顯示一條消息(例如,x=4)。確定自開始以來是否已經過了x`小時

我想知道如何在C++中實現這一點最好?我可以找出當前時間爲:

std::time_t result = std::time(nullptr); 
auto local = std::asctime(std::localtime(&result)); 

但是我怎麼確認是否x小時已經過去了?我應該在程序開始時找到當前時間,例如ct,然後讓程序每秒檢查當前時間(自epoch開始)(通過調用函數checkCurrentTime()),並且一旦觸發某個動作我的ct和當前時間等於x

+0

爲什麼'-1每30秒'?由於缺少代碼,建議在下調前閱讀問題描述!正如我所說,我仍處於設計階段,希望我的決定儘可能地最好! –

回答

0

是的,在幾小時內使用time since epoch可能工作。持續更新當前時間,直到距離最後一次警報爲止的x個小時,打印警報,更新警報時間並重復,直到完成監控。在這個例子中,你將需要#include <chrono>

x=4; 
current = last_alert = std::chrono::duration_cast<std::chrono::hours>(std::chrono::system_clock::now().time_since_epoch()).count(); 
while (!finished){ 
    while ((current-last_allert)<x){ 
     sleep(1); 
     current = std::chrono::duration_cast<std::chrono::hours>(std::chrono::system_clock::now().time_since_epoch()).count(); 
    } 
    printf("alert!"); 
    last_alert = std::chrono::duration_cast<std::chrono::hours>(std::chrono::system_clock::now().time_since_epoch()).count(); 
} 

sleep(1)仍然會佔用CPU使用率相當數量的,因爲警報是每4h或許檢查,而不是1

+0

謝謝你的回答。一個QQ - 爲什麼你將'1'作爲sleep()而不是'x * 60 * 60'的參數? –

+0

要監視某件事意味着您可能希望在條件通過之前多次檢查它,這樣程序只是半閒置,並且可以在監視時傳遞一些其他命令以重複執行。另外,sleep並不考慮處理時間,因此每次迭代時都會有一個毫秒左右的時間疊加。睡眠中的數字應該等於警報可以延遲的最大秒數。 –

相關問題