boost.asio系列(一)——deadline_timer

一.构造函数

  一个deadline_timer只维护一个超时时间,一个deadline_timer不同时维护多个定时器。在构造deadline_timer时指定时间:

1 basic_deadline_timer(boost::asio::io_service & io_service);
2
3 basic_deadline_timer( boost::asio::io_service & io_service,
4     const time_type & expiry_time);
5
6 basic_deadline_timer(boost::asio::io_service & io_service,
7     const duration_type & expiry_time);

二.同步定时器

  由于不涉及到异步,该函数和io_service没有什么关系。只是简单的sleep。

1 boost::asio::io_service io;
2 boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
3 t.wait(); 

三.异步定时器

  由于涉及到异步,该函数需要io_service来运行run,进行调度。

1 boost::asio::io_service io;
2 boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
3 t.async_wait(handler);

四.例子

 1 #include<boost/asio.hpp>
 2 #include<boost/ref.hpp>
 3 #include<iostream>
 4
 5
 6 using namespace std;
 7 typedef function<void (const boost::system::error_code&)> timer_callback ;
 8
 9 void print(const boost::system::error_code&)
10 {
11     cout << "async timer."<<endl;
12 }
13
14 void bindPrint(const boost::system::error_code & err,boost::asio::deadline_timer &timer)
15 {
16     cout<<"bind loop async timer."<<endl;
17     timer.expires_at(timer.expires_at() + boost::posix_time::seconds(5));
18     timer.async_wait(std::bind(bindPrint, std::placeholders::_1, boost::ref(timer)));
19 }
20
21
22 int main()
23 {
24     boost::asio::io_service io;
25
26     //1.基本的同步定时器
27     boost::asio::deadline_timer timer1(io, boost::posix_time::seconds(5));
28     timer1.wait();
29
30     //2.基本的异步定时器
31     boost::asio::deadline_timer timer2(io, boost::posix_time::seconds(5));
32     timer2.async_wait(print);
33
34     //3.使用lambda来生成回调函数
35     boost::asio::deadline_timer timer3(io, boost::posix_time::seconds(5));
36     timer_callback callback = [&](const boost::system::error_code& err)
37     {
38         cout<<"lambda loop async timer."<<endl;
39         timer3.expires_at(timer3.expires_at() + boost::posix_time::seconds(5));
40         timer3.async_wait(callback);
41     };
42     timer3.async_wait(callback);
43
44     //4.使用bind来生成回调函数
45     boost::asio::deadline_timer timer4(io, boost::posix_time::seconds(5));
46     timer4.async_wait(std::bind(bindPrint, std::placeholders::_1, boost::ref(timer4)));
47
48     io.run();
49     return 0;
50 }

五.补充

1.deadline_timer的计时是在定义后,即timer构造函数完成后就开始,而不是调用wait()或者async_wati()后开始计时。

2.deadline_timer不能进行拷贝的,所以在bind中必须使用boost::ref进行包裹。

时间: 2024-10-27 03:45:31

boost.asio系列(一)——deadline_timer的相关文章

boost.asio系列——Timer

同步Timer asio中提供的timer名为deadline_timer,它提供了超时计时的功能.首先以一个最简单的同步Timer为例来演示如何使用它. #include <iostream>    #include <boost/asio.hpp> int main()    {        boost::asio::io_service io;        boost::asio::deadline_timer timer(io, boost::posix_time::s

boost.asio系列——buffer

创建buffer 在io操作中,对数据的读写大都是在一个缓冲区上进行的,在asio框架中,可以通过asio::buffer函数创建一个缓冲区来提供数据的读写.buffer函数本身并不申请内存,只是提供了一个对现有内存的封装. char d1[128];    size_t bytes_transferred = sock.receive(asio::buffer(d1)); 直接用字符串做buffer也是常见的形式: string str = " hello world " ;    

boost.asio系列——io_service

IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service io_service;    asio::ip::tcp::socket socket(io_service); 在asio框架中,同步的io主要流程如下: 应用程序调用IO对象成员函数执行IO操作 IO对象向io_service 提出请求. io_service 调用操作系统的功能执行连接操作. 操

boost.asio系列——socket编程

asio的主要用途还是用于socket编程,本文就以一个tcp的daytimer服务为例简单的演示一下如何实现同步和异步的tcp socket编程. 客户端 客户端的代码如下: #include <iostream>    #include <boost/array.hpp>    #include <boost/asio.hpp> using boost::asio::ip::tcp; int main(int argc, char* argv[])    {    

boost.asio源码剖析(五) ---- 泛型与面向对象的完美结合

有人说C++是带类的C:有人说C++是面向对象编程语言:有人说C++是面向过程与面向对象结合的语言.类似的评论网上有很多,虽然正确,却片面,是断章取义之言. C++是实践的产物,C++并没有为了成为某某类型的语言而设计,而是一切以工程实践为目的,一切以提升语言能力为目的. 1983年C++诞生之时,由于兼容C语言而天生拥有了面向过程编程的能力:       1989年推出的2.0版,C++完善了对面向对象编程范式的支持:       1993年的3.0版,C++中引入了模板(template),

boost.asio源码剖析(二) ---- 架构浅析

* 架构浅析 先来看一下asio的0层的组件图.                     (图1.0) io_object是I/O对象的集合,其中包含大家所熟悉的socket.deadline_timer等对象,主要功能是提供接口给用户使用. services服务是逻辑功能的实现者,其中包含提供定时功能的deadline_timer_service.提供socket相关功能的win_iocp_socket_service(windows平台)/reactive_socket_service(其他

10 C++ Boost ASIO网路通信库 TCP/UDP,HTTP

  tcp 同步服务器,显示服务器端时间 tcp 同步服务器,提供多种选择 多线程的tcp 同步服务器 tcp 同步客户端 boost 域名地址解析 tcp异步服务器 tcp 异步客户端 UDP同步服务器 UDP同步客户端 UDP异步服务器 UDP异步客户端 HTTP同步客户端 HTTP异步客户端 同步实验: 异步实验 多线程异步实验 tcp 同步服务器,显示服务器端时间 [email protected]:~/boost$ cat main.cpp  #include <ctime> #in

boost::asio::io_service(之一)

boost::asio::io_service /// Provides core I/O functionality. /** * The io_service class provides the core I/O functionality for users of the * asynchronous I/O objects, including: * io_service类为下面的异步对象提供了核心的I/O操作函数 * * @li boost::asio::ip::tcp::socke

Boost.Asio技术文档

Christopher Kohlhoff Copyright ? 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_0.txt文件或从http://www.boost.org/LICENSE_1_0.txt) Boost.Asio是用于网络和低层IO编程的跨平台C++库,为开发者提供了C++环境下稳定的异步模型. 综述 基本原理 应用程序与外界交互的方式有很多,可通过文件,网络,串口或控制台.例如在网络通信中,完