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
=================================版权声明================================= 版权声明:原创文章 谢绝转载 啥说的,鄙视那些无视版权随 ...
随机推荐
- python 调试命令
部分整理自:http://flysnowxf.iteye.com/blog/1327677 启动调试: python -m pdb xxx.py 常用命令说明: l #查看运行到哪行代码 n #单步运 ...
- jacksi(比较实用的工具批处理)
批处理类别: 国产软件 批处理语言: 简体中文 授权方式: 免费软件 运行环境: Windows平台 警告:运行BAT源码是一种危险的动作,如果你不熟悉,请不要尝试! 这里分享的是用bat写的比较实用 ...
- shell脚本中常用命令
1 Shell中的特殊符号 1.1 $ 美元符号.用来表示变量的值.如变量NAME的值为Mike,则使用$NAME就可以得到“Mike”这个值. 1.2 ...
- nginx错误
在开发的时候遇到nginx错误 网上找了半天也没有找到解决方案: 先查看了一下nginx错误日志 cat /usr/local/nginx/logs/error.log 然后发现看不太懂 那么只能重启 ...
- POJ1061(线性同余方程)
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 105587 Accepted: 20789 Descript ...
- [转载]PCI/PCIe基础——配置空间
转载地址:http://blog.csdn.net/jiangwei0512/article/details/51603525 PCI/PCIe设备有自己的独立地址空间,这部分空间会映射到整个系统的地 ...
- 问题:asp.net 点击button按钮调到页面顶部;结果:asp.net点击一个按钮,使页面跳转到本面页上的指定位置
asp.net点击一个按钮,使页面跳转到本面页上的指定位置 (2011-04-19 16:46:51) 转载▼ 标签: it 最近在做一个项目. 用到标题所说的功能. 实现方法: 1.在aspx中 ...
- sqlserver 使用维护计划备份
https://www.cnblogs.com/teafree/p/4240040.html
- 部署和调优 1.1 nfs部署和优化-2
更改共享目录文件默认的所有者和所属组 已知道客户端有个user11用户 cat /etc/passwd user11:x:501:501::/home/user11:/bin/bash 服务端打开 v ...
- 使用mui框架后a标签无法跳转
由于最近工作项目上使用到前台mui框架,笔者在将H5转换为jsp时,遇见各种各样问题,原因归结为对mui框架不熟悉,今天就遇见一个特别奇怪的问题,界面中超链接<a>标签无法跳转,笔者试着添 ...