gpt4 book ai didi

c++ - 如何让自定义(计时)计时器与 sleep_until 一起工作?

转载 作者:行者123 更新时间:2023-11-30 02:47:35 26 4
gpt4 key购买 nike

我有一个自定义计时器模板,我想在 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<> 制作 time_point 作为(模板)Clock参数,但现在不同时间点之间存在转换。像这样的东西:

 using time_point = std::chrono::time_point<my_timer<timer_T>>;

可以查到代码here .

我怎样才能让它开始工作?另外,是否有一个小的 chrono howto,我可以在哪里找到一些如何创建自定义计时器的信息?

最佳答案

通过查看sleep_until,它使用time_point的时钟模板参数来查询当前时间。因此,这是在代码中定义时间点的正确方法:

#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 .

关于c++ - 如何让自定义(计时)计时器与 sleep_until 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22658468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com