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

本文提供了一个使用Boost.ASIO库实现的简单循环定时器示例,支持可变周期执行,包括固定周期如每5秒执行一次,或变周期执行如1秒、5秒、2秒交替执行,也可指定绝对时间执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

#include "stdafx.h"
#include <boost/asio.hpp>

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秒这个绝对时间点

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值