【发布时间】:2018-11-19 15:01:12
【问题描述】:
我想创建一个可以手动设置并与boost::asio::basic_waitable_timer一起使用的自定义时钟
我尝试了以下方法:
class my_clock {
public:
using duration = std::chrono::nanoseconds;
using time_point = std::chrono::time_point<std::chrono::system_clock>;
static time_point now() {
return n;
}
static void set_now(time_point now) {
n = now;
}
private:
static time_point n;
};
my_clock::time_point my_clock::n = my_clock::time_point();
然后按如下方式使用:
boost::asio::io_context ctx;
auto now = std::chrono::system_clock::now();
my_clock::set_now(now);
auto next_expire = now + std::chrono::milliseconds(10);
boost::asio::basic_waitable_timer<my_clock> ctimer(ctx);
ctimer.expires_at(next_expire);
int count = 0;
ctimer.async_wait([&](const boost::asio::error_code& ec) {
count++;
});
ctx.run_one();
// count == 0
my_clock::set_now(next_expire + std::chrono::seconds(1));
ctx.run();
// count == 1, except it's NOT
关于如何以这种方式将自定义时钟注入basic_waitiable_timer 有什么建议吗?
【问题讨论】:
标签: c++ boost boost-asio chrono