2017-03-05 1 views
2

私はタイムラインUIコントロールを作成していますが、このタイムラインの時刻は常にストップウォッチのようにゼロから始まります。私はstd :: chrono :: steady_clockを使用してスケールの開始時間と終了時間を保持することを考えましたが、ここでは '10am March 2017'のような時計時刻を持つのは間違っています規模。カスタムクロノクロックの作成方法

時刻を「0」に設定するカスタムクロックを作成する必要がありますか?ここで

+0

あなたは0から始まります。カスタムクロックを作成_can_私はあなたのtime_pointsが可能になっているのか分からないので、あなたがすべきかどうかを言うのは難しいです中古。プログラムの実行中に安定している必要がありますか、または他のプロセスにエクスポート/インポートする必要がありますか?ナノ秒の精度が必要ですか?二番目の精度?分精度?既存の時計から 'now()'を単に保存し、それを将来の時刻から差し引くだけで十分でしょうか?私たちに示すことができるコード例のユースケースはありますか? –

+0

ハワードに感謝してくれてありがとう、あなたのcppcon chrono talks btwを愛してください。 steady_clockを保存すると、time_pointが私にとってうまくいくでしょう。あなたの質問に答えるために、time_pointsはプロセスの内部にあるので、心配はありませんが、ナノ秒の精度が必要です。 –

+0

私は通常のstead_clockを使用すると思います。興味がありませんでした。私はsteady_clockに似ていますが、エポックが0のタイプをどのように定義できますか?私はそれに実験したい:) –

答えて

3

は一例であり、カスタム、それは(約)と呼ばれる最初の時からsteady_clockに基づいて、時間をカウントしているクロノクロック:

#include "chrono_io.h" 
#include <chrono> 
#include <iostream> 

struct MyClock 
{ 
    using duration = std::chrono::steady_clock::duration; 
    using rep  = duration::rep; 
    using period  = duration::period; 
    using time_point = std::chrono::time_point<MyClock>; 
    static constexpr bool is_steady = true; 

    static time_point now() noexcept 
    { 
     using namespace std::chrono; 
     static auto epoch = steady_clock::now(); 
     return time_point{steady_clock::now() - epoch}; 
    } 
}; 

int 
main() 
{ 
    using namespace date; 
    std::cout << MyClock::now().time_since_epoch() << '\n'; 
    std::cout << MyClock::now().time_since_epoch() << '\n'; 
    std::cout << MyClock::now().time_since_epoch() << '\n'; 
    std::cout << MyClock::now().time_since_epoch() << '\n'; 
} 

一つは、単に、ネストされたタイプdurationを定義する必要がありrepperiodそれはちょうどsteady_clockから盗むことができ、次にそれ自身のtime_pointを作成します。 MyClocksteady_clockのエポックが異なるため、time_pointの2つを誤って混在させたくないため、steady_clocktime_pointを使用しないでください。

は、steady_clockに基づいているため、is_steadyです。

そしてnow()関数は、(それが初めて呼び出されたときに評価)staticにおける現在時刻epochを記憶し、次にちょうどepochそれが呼び出されるたびからの時間を見出します。この減算によりdurationが作成され、これを使用してMyClock::time_pointを構築することができます。

私は"chrono_io.h"を使用しています。なぜなら、私は自分のフォーマットに怠けているからです。独自のカスタムクロックを作成するためにヘッダーは必要ありません。これは何もしませんが、印刷時間を簡単にします。私にとって

このプログラムは、単に出力:

1618ns 
82680ns 
86277ns 
88425ns 
関連する問題