2017-10-18 19 views
-3

私はいくつかの監視目的でクラスを設計しています。だから、x時間ごとにメッセージを表示したい(x=4のようなもの)。開始から `x`時間が経過したかどうかを確認する

私はこれをC++で達成するにはどうすればいいのでしょうか?私は、現在の時刻を知ることができます。

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

しかしx時間が経過した場合、どのように確認するのですか?プログラムの先頭に現在の時刻、たとえばctを見つけて、1秒ごとに(つまり、関数checkCurrentTime()を呼び出して)現在の時刻(エポック以降)をチェックして、何らかのアクションをトリガーする私のctと現在時刻はxに等しいですか?

+0

なぜ '-1チェックしているのでsleep(1)

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(); } 

#include <chrono>にはまだ、CPU使用率のかなりの量を取り上げる必要があります。 '?コードがないためにdownvotingする前に質問の説明を読むことをお勧めします!私が言ったように、私はまだ設計段階にあります。そして私の決定が可能な限り最善であることを望みます! –

答えて

0

はい、time since epochを使用すると時間がかかります。直前のアラートからx時間経過するまで現在の時刻を継続的に更新し、アラートを印刷し、アラート時間を更新し、監視が終了するまで繰り返します。この例では、アラートは、すべての4時間は、おそらく30秒ごとの代わりに、1

+0

ありがとうございます。 1つのqq - 'x * 60 * 60'の代わりに' sleep() 'のパラメータとして' 1'を渡すのはなぜですか? –

+0

何かを監視するということは、条件が渡される前に何度も確認したいということです。この方法では、プログラムは半アイドル状態になり、監視中に他のコマンドを繰り返して渡すことができます。また、スリープは処理時間を考慮しないため、繰り返し処理するたびにスタックされる追加のミリ秒があります。睡眠中の数字は、あなたのアラートが遅れることができる最大秒数と等しくなければなりません。 –

関連する問題