我有一个自定义计时器模板,我想在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));
我认为我的问题是我必须使用my_timer&lt;&gt;制作time_point
as(模板)Clock参数,但现在不同的time_points之间存在转换。类似的东西:
using time_point = std::chrono::time_point<my_timer<timer_T>>;
可以找到代码here。
我怎样才能让它发挥作用?此外,还有一个小的计时器,我可以在哪里找到一些如何创建自定义计时器的信息?
答案 0 :(得分:3)
通过查看sleep_until,它使用time_point的clock template参数来查询当前时间。因此,这是在代码中定义时间点的正确方法:
#include <chrono>
#include <thread>
#include <iostream>
template<typename timer_T = std::chrono::steady_clock>
class my_timer {
public:
using timer_type = timer_T;
using time_point = std::chrono::time_point<my_timer, typename timer_T::time_point::duration >;
using duration = typename timer_T::duration;
using rep = typename duration::rep;
using period = typename duration::period;
static const bool is_steady = timer_T::is_steady;
static time_point now() {
return time_point(timer_T::now() - epoch_);
}
private:
static typename timer_T::time_point epoch_;
};
template<typename T>
typename T::time_point my_timer<T>::epoch_ = T::now();
int main(int, char*[]) {
for(int i=0; i<5; i++) {
std::cout << my_timer<>::now().time_since_epoch().count() << "\n";
std::this_thread::sleep_until( my_timer<>::now() + std::chrono::seconds(3) );
}
}
工作here。