boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
来源:互联网 发布:windows10虚拟mac系统 编辑:程序博客网 时间:2024/05/01 18:46
一、使用同步定时器
这个示例程序通过展示如何在一个定时器执行一个阻塞等待。
//makefile#----------------------------------------------------------#makefile helloworld测试用例#####-----------------------------------------------------------ggg=g++exe=asiotimer#所有的.o文件写在这里obj = asiotimer.o#所要关联的cpp文件写在这里cpp = asiotimer.cpp#加入库文件libso = -lboost_thread -lboost_system$(exe):$(obj) @echo "链接开始................" $(ggg) $(libso) -o $(exe) $(obj)hw.o : $(cpp) @echo "编译开始................" $(ggg) -std=c++11 -c $(cpp).PHONY : clean cleanallcleanall: @echo "开始make all..........." -rm -rf $(exe) $(obj)clean: @echo "开始清理................" -rm -rf $(obj)
2、asiotimer.h头文件
//asiotimer.h#ifndef __ASIOTIMER__H__#define __ASIOTIMER__H__#include <iostream>#include <boost/asio.hpp>//#define BOOST_DATE_TIME_SOURCE#include "boost/date_time/posix_time/posix_time.hpp"#endif
3、asiotimer.cpp文件
//asiotimer.cpp#include "asiotimer.h"int main(){ boost::asio::io_service io; boost::asio::deadline_timer t(io,boost::posix_time::seconds(5)); t.wait(); std::cout<<"hello,world\n"; return 0;}
二、使用异步定时器示例
本示例程序演示了如何使用Asio的异步回调功能由示例一修改程序 ,开启计时器执行一个异步等待。
1、makefile文件
makefile 与示例一基本相同,只需要修改
exe=asiotest2
#所有的.o文件写在这里
obj = asiotest2.o
#所要关联的cpp文件写在这里
cpp = asiotest2.cpp
2、asiotest2.h
#ifndef __ASIOTEST2__H__#define __ASIOTEST2__H__#include <iostream>#include <boost/asio.hpp>#include <boost/date_time/posix_time/posix_time.hpp>void print(const boost::system::error_code& );#endif
3、asiotest2.cpp
#include "asiotest2.h"using namespace std;using namespace boost;void print(const boost::system::error_code& ){ std::cout<<"hello,world!\n";}int main(){ boost::asio::io_service io; boost::asio::deadline_timer t(io,boost::posix_time::seconds(5)); t.async_wait(&print); io.run(); return 0;}
三、绑定参数到处理程序
在本示例中,我们将在示例二修改程序,使定时器每秒被激活一次。这将显示如何传递额外的参数给你的处理函数。
1、makefile 文件同示例二makefile修改方法
2、头文件
#ifndef __ASIOTEST3__H__#define __ASIOTEST3__H__#include <iostream>#include <boost/asio.hpp>#include <boost/bind.hpp>#include <boost/date_time/posix_time/posix_time.hpp>#endif
3、CPP文件
#include "asiotest3.h"void print(const boost::system::error_code&, boost::asio::deadline_timer* t,int* count){ if(*count<5) { std::cout<<*count<<"\n"; ++(*count); t->expires_at(t->expires_at() + boost::posix_time::seconds(1)); t->async_wait(boost::bind(print, boost::asio::placeholders::error,t,count)); }}int main(){ boost::asio::io_service io; int count=0; boost::asio::deadline_timer t(io,boost::posix_time::seconds(1)); t.async_wait(boost::bind(print,boost::asio::placeholders::error, &t,&count)); io.run(); std::cout<<"Final count is" <<count<<"\n"; return 0;}
四、使用成员函数做为处理程序示例
在本示例中,我们将看到如何使用一个类的成员函数作为回调处理程序。
1、makefile 同上面示例
2、头文件
#ifndef __ASIOTEST4__H__#define __ASIOTEST4__H__#include <iostream>#include <boost/asio.hpp>#include <boost/bind.hpp>#include <boost/date_time/posix_time/posix_time.hpp>class printer{public: printer(boost::asio::io_service& io) :timer_(io,boost::posix_time::seconds(1)), count_(0) { timer_.async_wait(boost::bind(&printer::print,this)); } ~printer() { std::cout<<"Final count is "<<count_<<"\n"; } void print() { if(count_<5) { std::cout<<count_<<std::endl; ++count_; timer_.expires_at(timer_.expires_at()+boost::posix_time::seconds(1)); timer_.async_wait(boost::bind(&printer::print,this)); } }private: boost::asio::deadline_timer timer_; int count_;};
3、cpp文件
#include "asiotest4.h"int main(){ boost::asio::io_service io; printer p(io); io.run(); return 0;}
五、多线程的同步处理示例
本示例演示boost::asio::strand 在多线程程序中同步回调处理程
1、makefile同上
2、头文件
#ifndef __ASIOTEST5__H__#define __ASIOTEST5__H__#include <iostream>#include <boost/asio.hpp>#include <boost/thread/thread.hpp>#include <boost/bind.hpp>#include <boost/date_time/posix_time/posix_time.hpp>class printer{public: printer(boost::asio::io_service& io):strand_(io), timer1_(io,boost::posix_time::seconds(1)), timer2_(io,boost::posix_time::seconds(1)),count_(0) { timer1_.async_wait(strand_.wrap(boost::bind(&printer::print1,this))); timer2_.async_wait(strand_.wrap(boost::bind(&printer::print2,this))); } ~printer() { std::cout<<"Final count is " <<count_<<std::endl; } void print1() { if(count_ < 10) { std::cout<<"Timer 1: "<<count_<<std::endl; ++count_; timer1_.expires_at(timer1_.expires_at() + boost::posix_time::seconds(1)); timer1_.async_wait(strand_.wrap(boost::bind(&printer::print1,this))); } } void print2() { if(count_ < 10) { std::cout<<"Timer 2: " <<count_<<std::endl; ++count_; timer2_.expires_at(timer2_.expires_at() + boost::posix_time::seconds(1)); timer2_.async_wait(strand_.wrap(boost::bind(&printer::print2,this))); } }private: boost::asio::strand strand_; boost::asio::deadline_timer timer1_; boost::asio::deadline_timer timer2_; int count_;};#endif
3、CPP文件
#include "asiotest5.h"int main(){ boost::asio::io_service io; printer p(io); boost::thread t(boost::bind(&boost::asio::io_service::run,&io)); io.run(); t.join(); return 0;}
0 0
- boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
- boost-asio学习1——定时器(同步、异步)
- C++ Boost库 asio同步/异步模式[ 定时器来体现 ]
- Boost Asio 1.56 学习之同步定时器
- C++ 实现同步异步定时器
- C++ Boost库 asio同步/异步模式[ 定时器来体现 ] [大三四八九月实习]
- C++ Boost库 asio同步/异步模式[ 定时器来体现 ] 笔记
- 定时器与线程的同步
- 线程的同步与定时器
- boost-asio学习2——同步、异步socket处理
- windows多线程同步机制---可等候定时器
- 网络多线程 异步 同步处理
- Boost asio 同步和异步socke处理的流程
- Boost::timer 定时器的使用
- boost 之定时器的使用
- 线程同步通信与定时器Timer使用
- .线程同步通信与定时器Timer使用
- jmeter同步定时器
- 越来越多地Windows Phone被西欧各国政府所采纳
- CUDA学习,第一个kernel函数及代码讲解
- C语言中fflush函数的使用方法
- Linux下增加硬盘空间
- hdu 2546 饭卡(有小小限制的 01背包)
- boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
- 内核同步机制概述
- <Practical C Programming> chapter 4
- 十字路口的老罗掉队了
- Overload 与 Override 的区别
- 通过系统缓冲流类提高I/O操作
- javaEE Tomcat目录结构
- 脚印之需求惹祸----听他的没错的?
- zoj 2551