2017-01-12 7 views
2

私は、タイムスタンプ(エポックからナノ秒)があります。2ナノ秒クロノ:: time_pointsの差(秒単位)?

uint64_t ts = .....; 

をし、私はそれが現在のシステム時刻よりも古い5秒以上であるかどうかを確認したいと思います。

タイムスタンプをtime_pointに変換する必要がありますか?これを現在の時間(ナノ秒単位)から差し引いて、その値がchrono::duration::seconds(5)より大きいかどうかをチェックします。

は、これまでのところ、これを手に入れた:

const std::chrono::time_point tstp(std::chrono::duration_cast<std::chrono::nanoseconds>(rawNanos)); 
const std::chrono::time_point now = std::chrono::high_resolution_clock::now(); 

const bool old = now - tstp > std::chrono::seconds(5); 

が、苦労を理由time_pointのコンストラクタタイプの。

答えて

4

これにはhigh_resolution_clockを使用しないでください。いくつかのプラットフォームでは、high_resolution_clockは、コンピュータが起動されてからの時間をカウントしますが、Unixエポックからの時間ではありません。

標準では指定されていませんが、事実上の標準は、すべてのプラットフォームで、system_clockがUnixエポックから時間をカウントすることです。

durationにテンプレート化されたsystem_clockに基づくtime_pointであるテンプレート化されたタイプのエイリアスを最初に宣言すると便利です。これはUnixエポックからの時間をカウント任意の精度のtime_pointを作成することが容易になります:あなたが書くことができるようになりますC++ 14では

uint64_t ts = 1235; 
using namespace std::chrono; 
const bool old = system_clock::now() > 
         sys_time<nanoseconds>{nanoseconds{ts}} + seconds{5}; 

:ことを考えると

template <class D> 
using sys_time = std::chrono::time_point<std::chrono::system_clock, D>; 

関連する問題