boost asio deadline_timer 取消测试

【boost asio deadline_timer 取消测试】今天对 boost asio deadline_timer 的取消做了个测试,结果记录如下:

对于任何时间未到的 timer,只要对该 timer 做了 cancel 或者 expires_xxx 操作,该 timer 原先登记的 handler 都会被调用,并且 err 为 true。因此对于 deadline_timer 比较建议的做法如下:

// timer handler 例子 void timer_handler(boost::asio::deadline_timer* timer , const boost::system::error_code& err) { if (err) { std::cout << "闹钟被取消了" << std::endl; } else { if (timer->expires_at() <= boost::asio::deadline_timer::traits_type::now()) { std::cout << "闹钟时间点到了,该起床了" << std::endl; } else { std::cout << "搞什么搞,时间还没有到,闹钟就响了,还让不让人睡觉" << std::endl; } } } // timer 例子 void timer_enable(boost::asio::deadline_timer* timer , size_t seconds_from_now) { assert(timer); timer->expires_from_now(boost::posix_time::seconds(seconds_from_now)); timer->async_wait(boost::bind(timer_handler, timer, boost::asio::placeholders::error)); }

    推荐阅读