我对这些库还是很陌生,我可以在 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 对象并将其设置为等于现在的最佳方法是什么?