boost.asio系列(一)——deadline_timer
一.构造函数
一个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进行包裹。
boost.asio系列(一)——deadline_timer的更多相关文章
- boost.asio系列——Timer
同步Timer asio中提供的timer名为deadline_timer,它提供了超时计时的功能.首先以一个最简单的同步Timer为例来演示如何使用它. #include<iostream&g ...
- boost.asio系列——socket编程
asio的主要用途还是用于socket编程,本文就以一个tcp的daytimer服务为例简单的演示一下如何实现同步和异步的tcp socket编程. 客户端 客户端的代码如下: #include &l ...
- boost.asio系列——io_service
IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...
- boost.asio系列——buffer
创建buffer 在io操作中,对数据的读写大都是在一个缓冲区上进行的,在asio框架中,可以通过asio::buffer函数创建一个缓冲区来提供数据的读写.buffer函数本身并不申请内存,只是提供 ...
- boost::asio::deadline_timer(理解)
并发与并行: 并发和并行从宏观上来讲都是同时处理多路请求的概念.但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔内发生. 1.Timer.1 - 使 ...
- boost.asio源码剖析(五) ---- 泛型与面向对象的完美结合
有人说C++是带类的C:有人说C++是面向对象编程语言:有人说C++是面向过程与面向对象结合的语言.类似的评论网上有很多,虽然正确,却片面,是断章取义之言. C++是实践的产物,C++并没有为了成为某 ...
- 如何在多线程leader-follower模式下正确的使用boost::asio。
#include <assert.h> #include <signal.h> #include <unistd.h> #include <iostream& ...
- BOOST.Asio——Tutorial
=================================版权声明================================= 版权声明:原创文章 谢绝转载 啥说的,鄙视那些无视版权随 ...
- BOOST.Asio——Overview
=================================版权声明================================= 版权声明:原创文章 谢绝转载 啥说的,鄙视那些无视版权随 ...
随机推荐
- 【LeetCode】075. Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- 基于JQ的简单左右轮播图
// 轮播图 主要实现思想: a.第一层div,设置overflow为hidden. b.里面是一个ul,每个li里面有个img或者为每个li设置背景图片也可以. c.li设置为左浮动,排成一行,还有 ...
- git之log
1 查看提交的具体文件 git log --oneline --stat 可参考: http://www.cnblogs.com/BeginMan/p/3577553.html
- mycat 新增分片和字符集
执行 select * from travelrecord ,分析Debug日志,说明整个执行逻辑,包括连接获取,连接同步信息,数据合并,数据返回,连接释放 新增一个分片表 T_VOTE (ID,PR ...
- 【转载】基于TINY4412的Andorid开发-------简单的LED灯控制
阅读目录(Content) 一.编写驱动程序 二.编写代码测试驱动程序 三.编写HAL代码 四.编写Framework代码 五.编写JNI代码 六.编写App 参考资料: <Andriod系统源 ...
- C# WinForm中如何让当前应用程序只允许启动一个实例
我们在WinForm开发中,很多情况下是需要只允许让用户运行一个实例,那么代码其实很简单.只需要修改Program.cs文件,代码如下 static class Program { /// <s ...
- 【271】IDL-ENVI二次开发
参考:String Processing Routines —— 字符串处理函数 01 STRING 返回字符串. 02 STRCMP 比较字符串,一样返回1,不一样返回0,默认大小写敏感. ...
- SpringBoot表单验证
需求:年龄在18岁以下的女生不能注册 处理器中的写法: 实体类中的写法:
- hibernateTemplate方法使用
- JAVA基础知识总结13(同步)
好处:解决了线程安全问题. 弊端:相对降低性能,因为判断锁需要消耗资源,还容易产生了死锁. 定义同步是有前提的: 1,必须要有两个或者两个以上的线程,才需要同步. 2,多个线程必须保证使用的是同一个锁 ...