私はまだライブラリにかなり慣れていないため、std::chrono で見つけることができるドキュメントは機能しません。
タイム スタンプを含むオブジェクトのコンテナーを実装しようとしています。オブジェクトはすべて、最新のものから古いものの順に保存され、std::chrono::time_point を使用して各タイム スタンプを表すことにしました。データを処理するスレッドは定期的にウェイクアップし、データを処理し、いつ再ウェイクアップする必要があるかを確認してから、その期間スリープします。
static std::chrono::time_point<std::chrono::steady_clock, std::chrono::milliseconds> _nextWakeupTime;
上記の宣言は、ミリ秒精度のステッド クロックを使用しているという印象を受けます。
次のステップは、_nextWakeupTime を現在の表現に設定することです。
_nextWakeupTime = time_point_cast<milliseconds>(steady_clock::now());
その行はコンパイルされません:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::chrono::time_point<_Clock,_Duration>' (or there is no acceptable conversion)
with
[
_Clock=std::chrono::system_clock,
_Duration=std::chrono::milliseconds
]
chrono(298): could be 'std::chrono::time_point<_Clock,_Duration> &std::chrono::time_point<_Clock,_Duration>::operator =(const std::chrono::time_point<_Clock,_Duration> &)'
with
[
_Clock=std::chrono::steady_clock,
_Duration=std::chrono::milliseconds
]
while trying to match the argument list '(std::chrono::time_point<_Clock,_Duration>, std::chrono::time_point<_Clock,_Duration>)'
with
[
_Clock=std::chrono::steady_clock,
_Duration=std::chrono::milliseconds
]
and
[
_Clock=std::chrono::system_clock,
_Duration=std::chrono::milliseconds
]
Windows システムでは、stead_clock は system_clock と同じものであることは理解していますが、ここで何が起こっているのかわかりません。私はこれを行うことができることを知っています:
_nextWakeupTime += _nextWakeupTime.time_since_epoch();
それが私が何をすべきかをうまく表しているとは思えません。
同じように、指定されたクロック/期間の time_point オブジェクトをインスタンス化し、現在と等しく設定する最良の方法は何ですか?