私はタイムラインUIコントロールを作成していますが、このタイムラインの時刻は常にストップウォッチのようにゼロから始まります。私はstd :: chrono :: steady_clockを使用してスケールの開始時間と終了時間を保持することを考えましたが、ここでは '10am March 2017'のような時計時刻を持つのは間違っています規模。カスタムクロノクロックの作成方法
時刻を「0」に設定するカスタムクロックを作成する必要がありますか?ここで
私はタイムラインUIコントロールを作成していますが、このタイムラインの時刻は常にストップウォッチのようにゼロから始まります。私はstd :: chrono :: steady_clockを使用してスケールの開始時間と終了時間を保持することを考えましたが、ここでは '10am March 2017'のような時計時刻を持つのは間違っています規模。カスタムクロノクロックの作成方法
時刻を「0」に設定するカスタムクロックを作成する必要がありますか?ここで
は一例であり、カスタム、それは(約)と呼ばれる最初の時から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
を定義する必要がありrep
とperiod
それはちょうどsteady_clock
から盗むことができ、次にそれ自身のtime_point
を作成します。 MyClock
とsteady_clock
のエポックが異なるため、time_point
の2つを誤って混在させたくないため、steady_clock
のtime_point
を使用しないでください。
は、steady_clock
に基づいているため、is_steady
です。
そしてnow()
関数は、(それが初めて呼び出されたときに評価)static
における現在時刻epoch
を記憶し、次にちょうどepoch
それが呼び出されるたびからの時間を見出します。この減算によりduration
が作成され、これを使用してMyClock::time_point
を構築することができます。
私は"chrono_io.h"
を使用しています。なぜなら、私は自分のフォーマットに怠けているからです。独自のカスタムクロックを作成するためにヘッダーは必要ありません。これは何もしませんが、印刷時間を簡単にします。私にとって
このプログラムは、単に出力:
1618ns
82680ns
86277ns
88425ns
あなたは0から始まります。カスタムクロックを作成_can_私はあなたのtime_pointsが可能になっているのか分からないので、あなたがすべきかどうかを言うのは難しいです中古。プログラムの実行中に安定している必要がありますか、または他のプロセスにエクスポート/インポートする必要がありますか?ナノ秒の精度が必要ですか?二番目の精度?分精度?既存の時計から 'now()'を単に保存し、それを将来の時刻から差し引くだけで十分でしょうか?私たちに示すことができるコード例のユースケースはありますか? –
ハワードに感謝してくれてありがとう、あなたのcppcon chrono talks btwを愛してください。 steady_clockを保存すると、time_pointが私にとってうまくいくでしょう。あなたの質問に答えるために、time_pointsはプロセスの内部にあるので、心配はありませんが、ナノ秒の精度が必要です。 –
私は通常のstead_clockを使用すると思います。興味がありませんでした。私はsteady_clockに似ていますが、エポックが0のタイプをどのように定義できますか?私はそれに実験したい:) –