一.构造函数

  一个deadline_timer只维护一个超时时间,一个deadline_timer不同时维护多个定时器。在构造deadline_timer时指定时间:

 basic_deadline_timer(boost::asio::io_service & io_service);

 basic_deadline_timer( boost::asio::io_service & io_service,
const time_type & expiry_time); basic_deadline_timer(boost::asio::io_service & io_service,
const duration_type & expiry_time);

二.同步定时器

  由于不涉及到异步,该函数和io_service没有什么关系。只是简单的sleep。

 boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds());
t.wait();

三.异步定时器

  由于涉及到异步,该函数需要io_service来运行run,进行调度。

 boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds());
t.async_wait(handler);

四.例子

 #include<boost/asio.hpp>
#include<boost/ref.hpp>
#include<iostream> using namespace std;
typedef function<void (const boost::system::error_code&)> timer_callback ; void print(const boost::system::error_code&)
{
cout << "async timer."<<endl;
} void bindPrint(const boost::system::error_code & err,boost::asio::deadline_timer &timer)
{
cout<<"bind loop async timer."<<endl;
timer.expires_at(timer.expires_at() + boost::posix_time::seconds());
timer.async_wait(std::bind(bindPrint, std::placeholders::_1, boost::ref(timer)));
} int main()
{
boost::asio::io_service io; //1.基本的同步定时器
boost::asio::deadline_timer timer1(io, boost::posix_time::seconds());
timer1.wait(); //2.基本的异步定时器
boost::asio::deadline_timer timer2(io, boost::posix_time::seconds());
timer2.async_wait(print); //3.使用lambda来生成回调函数
boost::asio::deadline_timer timer3(io, boost::posix_time::seconds());
timer_callback callback = [&](const boost::system::error_code& err)
{
cout<<"lambda loop async timer."<<endl;
timer3.expires_at(timer3.expires_at() + boost::posix_time::seconds());
timer3.async_wait(callback);
};
timer3.async_wait(callback); //4.使用bind来生成回调函数
boost::asio::deadline_timer timer4(io, boost::posix_time::seconds());
timer4.async_wait(std::bind(bindPrint, std::placeholders::_1, boost::ref(timer4))); io.run();
return ;
}

五.补充

1.deadline_timer的计时是在定义后,即timer构造函数完成后就开始,而不是调用wait()或者async_wati()后开始计时。

2.deadline_timer不能进行拷贝的,所以在bind中必须使用boost::ref进行包裹。

最新文章

  1. Oracle 遇到的问题 (1)
  2. 图割Graph-Cut的最大流实现
  3. 【学习整理】NOIP涉及的数论 [updating]
  4. DOM学习笔记(思维导图)
  5. WPF MVVM模式下的无阻塞刷新探讨
  6. nginx 均衡负载配置
  7. Notes of the scrum meeting(10/28)
  8. 高性能Server---Reactor模型-----Socket
  9. jquery UI推荐
  10. 浅谈Servlet(一)
  11. 【NFS】nfs安装调优
  12. MFC图片操作
  13. GIS优秀博客以及网址收藏,持续更新
  14. 【深入理解Java集合框架】红黑树讲解(上)
  15. SQL Server2005/2008 作业执行失败的解决办法
  16. Java反射的用法
  17. C#编程(三十)----------泛型结构,泛型方法,泛型委托
  18. error:please select android sdk
  19. 浅谈QT打印功能实现
  20. Mysql5.7 的错误日志中最常见的note级别日志解释

热门文章

  1. GWT实现“跟随标题栏”
  2. Docker持续化集成和测试
  3. Oracle中REGEXP_SUBSTR函数(字符串转多行)
  4. 12-01JavaScript事件(Events)
  5. apache 禁delete
  6. LNMP 1.6 常见的502问题解决
  7. springboot启动异常java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS
  8. spring 的aop操作
  9. import time
  10. js闭包(三)