您的位置:首页 > 其它

boost asio deadline_timer 取消测试

2011-06-12 08:54 489 查看
今天对 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));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: