boost-asio学习手记之定时器设置篇
时间:2009-08-05 来源:asio
一般的定时器应用方法如下:
定时器需要头文件
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
1.首先创建定时器,绑定到io_service
boost::asio::io_service io ;
boost::asio::deadline_timer t ( io );
2. 设置定时器的目标时间
t.expires_at() 返回 定时器的当前设置时间,同时也用这个接口设置新的定时时间
如下:
t.expires_at ( boost::posix_time::microsec_clock::universal_time() + boost::posix_time::seconds(3)
);
boost::posix_time::microsec_clock::universal_time() 返回当前时间
这个函数就更爽了,顾名思义就是从现在时间开始外加sec定时 这样就设置了3秒定时器 t.async_wait( &print ); (需要注意的是 每次定时器到达后,其回调函数需要重新设定否则定时器失效) 绑定定时器回调函数 其中 其中回调函数原型要满足如下形式可以直接调用: void print(boost::system::error_code &e ) 当然任何形式的print都不会有问题因为我们有神奇的bind 如void print(boost::system::error_code &e ,std::string str ) t.async_wait( boost::bind( &print , boost::asio::placeholders::error , "定时器到了" ) ); 最后的最后就是 io_service.run() 啦 !
补充的是:
t.expires_from_now(boost::posix_time::seconds(5));
这个函数就更爽了,顾名思义就是从现在时间开始外加sec定时 这样就设置了3秒定时器 t.async_wait( &print ); (需要注意的是 每次定时器到达后,其回调函数需要重新设定否则定时器失效) 绑定定时器回调函数 其中 其中回调函数原型要满足如下形式可以直接调用: void print(boost::system::error_code &e ) 当然任何形式的print都不会有问题因为我们有神奇的bind 如void print(boost::system::error_code &e ,std::string str ) t.async_wait( boost::bind( &print , boost::asio::placeholders::error , "定时器到了" ) ); 最后的最后就是 io_service.run() 啦 !
补充的是:
cancel();
取消定时器
相关阅读 更多 +