【发布时间】:2014-03-26 20:13:27
【问题描述】:
我有一个自定义计时器模板,我想在std::this_thread::sleep_until() 中使用它。所以我的now() 方法看起来像这样:
static time_point now() {
return time_point(timer_T::now() - epoch_);
}
其中 epoch_ 用 timer_T::now() 初始化。现在我希望能够 sleep_until 一个特定的时间点。
std::this_thread::sleep_until(my_timer<>::now() + std::chrono::seconds(1));
我认为我的问题是我必须将 time_point 与 my_timer 作为(模板)Clock 参数,但现在不同的时间点之间存在转换。类似:
using time_point = std::chrono::time_point<my_timer<timer_T>>;
代码可以在here找到。
我怎样才能让它发挥作用?另外,是否有一个小的 chrono howto out,我可以在其中找到一些如何创建自定义计时器的信息?
【问题讨论】:
-
您正在更改 time_point 的含义,根据定义,它必须存储自纪元以来的持续时间。如果您不遵守规则,则依赖于该规则的 API 将无法工作。创建您自己的完全不同的时间点类,隐式转换为实时时间点。
-
是的,但是标准中没有定义时代,所以我认为应该创建一个自己的时钟,因为 time_point 是基于您作为模板参数提供的时钟。
-
是的,创建自己的时钟是可以的,它可以使用它需要的任何时代。 “纪元”并不意味着“1970 年第一天的午夜”;这就是“UNIX 时代”。 “纪元”的意思很简单,就是“参考日期”。