用boost的asio+deadline_timer实现一个循环定时器

废话不多说, asio的原理请百度其它博文, 百度上好多deadline_timer的例子都是单次定时, 或者是封装的很长. 本文写的是一个超简单的例子来实现循环定时, 注意这个循环的周期是可变的, 可以每5秒固定周期执行, 也可以1秒/5秒/2秒变周期执行, 或者指定一个绝对时间来执行.

 

#include "stdafx.h"
#include 

using namespace std;
using namespace boost;
using namespace boost::posix_time;
using namespace boost::asio;

io_service io;
deadline_timer ti5s(io, seconds(5));

void timer_wait5s(const boost::system::error_code& err)
{
	cout << "time out: 5s" << endl;
	ti5s.expires_from_now(seconds(5));                 // 用法1.
	//ti5s.expires_at(ti5s.expires_at() + seconds(5)); // 用法2.
	ti5s.async_wait(timer_wait5s);

}


int _tmain(int argc, _TCHAR* argv[])
{
	ti5s.async_wait(timer_wait5s);
	io.run();

	return 0;
}

有一点要说明的:

- 代码中标的用法1: expires_from_now函数, 用于在当前时间之后的5秒再次执行异步, 这是个相对时间

- 代码中标的用法2: expires_at函数, 用于指定时间后再次执行异步, 这是个绝对时间, 在代码里的绝对时间是ti5s.expires_at(ti5s.expires_at() + seconds(5)); 也就是从现在开始后5秒这个绝对时间点

 

你可能感兴趣的:(boost经验)