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
=================================版权声明================================= 版权声明:原创文章 谢绝转载 啥说的,鄙视那些无视版权随 ...
随机推荐
- CODE FESTIVAL 2017 qual A--C - Palindromic Matrix(模拟所有情况,注意细节)
个人心得:其实本来这题是有规律的不过当时已经将整个模拟过程都构思出来了,就打算试试,将每个字符和总和用优先队列 装起来,然后枚举每个点,同时进行位置标志,此时需要多少个点的时候拿出最大的和出来,若不满 ...
- LeetCode Shopping Offers
原题链接在这里:https://leetcode.com/problems/shopping-offers/description/ 题目: In LeetCode Store, there are ...
- 自定义Django Command
转: django的command命令是要放在一个app的management/commands目录下.python2环境中,请确保management和management/commands目录内都 ...
- 学习动态性能表(14)--v$parameter&v$system_parameter
学习动态性能表 第14篇--V$PARAMETER&V$SYSTEM_PARAMETER 2007.6.11 这两个视图列出的各参数项名称以及参数值.V$PARAMETER显示执行查询的se ...
- plsql Developer----plsql软件总结(待续更新)
如何查看数据库所有的表 打开pl/sql Developer连接上数据库了以后,在菜单 Tools 下面有个 Object browser 将其打勾(如果已经打勾了就不用管了),之后在IDE的左边有个 ...
- 【转】Cron表达式简介
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ...
- snmpwalk用法
snmpwalk语法:snmpwalk 交换机或路由器IP地址 -c SNMP读密码 -v 1或2(代表SNMP版本) OID(对象标示符) 用法举例:1.snmpwalk -c public -v ...
- apache配置详解 apache安装路径
http://www.linuxidc.com/Linux/2015-02/113921.htm 不同apache的安装方式 的安装目录示例 http://www.121down.com/articl ...
- eclipse -- propedit 安装.
SSH 项目中.用到国际化文件,Message.properties 但里面的文本都是 unicode 格式的,用起来不谁.而且也不想通过其它工具转码来使用. 可以通过安装 eclipse 的 pro ...
- Angular5学习笔记 - 创建组件(四)
一.创建组件 ng generate component component-name #简写 ng g c component-name ng generate directive|pipe|ser ...