【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));
}
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题