跟着 http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/tutorial.html 学习asio。
编译的时候需要加上 -lboost_system
同步定时器例子
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace std;
void tuttimer1()
{
boost::asio::io_service io;
// 等待5秒
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
}
int main() {
tuttimer1();
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
异步定时器例子
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
// 定义回调函数,asio库要求回调函数只能有一个参数,且为 const boost::system::error_code & 类型
void print(const boost::system::error_code& /*e*/) {
cout << "This is asynchronous timer!" << endl;
}
void tuttimer2()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
cout << "asynchronous timer start!" << endl;
t.async_wait(&print); // 异步等待,传入回调函数,立即返回
cout << "asynchronous timer processing!" << endl;
io.run(); // 很重要!异步IO必须。如果不调用run(),
// 虽然操作被异步执行了,但没有一个等待它完成的机制,回调函数将得不到执行机会。
cout << "asynchronous timer end!" << endl;
}
int main() {
tuttimer2();
return 0;
}
/*
运行结果:
asynchronous timer start!
asynchronous timer processing!
This is asynchronous timer!
asynchronous timer end!
*/
异步定时器使用bind
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/bind.hpp>
void print1(const boost::system::error_code& /*e*/,
boost::asio::deadline_timer* t, int* count)
{
if (*count < 5)
{
cout << *count << "\n" << endl;
++(*count);
t->expires_at(t->expires_at() + boost::posix_time::seconds(1));
t->async_wait(boost::bind(print1, boost::asio::placeholders::error, t, count));
}
}
void tuttimer3()
{
boost::asio::io_service io;
int count = 0;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(1));
t.async_wait(boost::bind(print1, boost::asio::placeholders::error, &t, &count));
io.run();
cout << "Final count is " << count << "\n" << endl;
}
int main() {
tuttimer3();
return 0;
}
/*
运行结果:
0
1
2
3
4
Final count is 5
*/
分享到:
相关推荐
利用Boost::Asio库来实现Post/Get请求的发送。可以快速开发c++的http请求,访问以http为协议的服务器示例代码。
c++ boost asio网络库 异步tcp方式传文件 速度在10M左右.zip
该c++ web server基于boost.asio库编写,同时支持http和https协议。该工程基于vs2015编译通过,相关配置和说明见readme.txt
Boost.Asio C++ Network Programming 书的翻译 此版本的书无目录失效BUG 并且带全书源代码 方便学习使用
Boost.Asio C++ Network Programming
Boost.Asio C++ Network Programming Cookbook.pdf Boost.Asio C++ Network Programming Cookbook.pdf
Boost.Asio C++ Network Programming(2nd).pdf Boost.Asio C++ Network Programming(2nd).pdf Boost.Asio C++ Network Programming(2nd).pdf
Boost ASIO C++ 网络编程-带实例完整版本
Boost.Asio C++ 网络编程 PDF 高清 非扫描 中文版
http://blog.csdn.net/csnd_ayo/article/details/61577634 文章讲解的操作源码
boost库中asio的简单应用,一个服务器一个客户端
最新版本,最新排版
Boost.Asio.C++.Network.Programming.,想了解的可以看看
Boost ASIO C++ 网络编程 中文完整版,附全书源代码!
boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点...
The Boost.Asio library is aimed at reducing accidental complexity by introducing type systems and exploiting object-oriented methods, and decreasing the development time by providing high degrees of ...
boost asio网络编程入门教程,可以作为学习参考
详细介绍boost asio框架的使用,包括同步模型和异步模型,包括服务器和客户端的编程例子
由于以上多种原因,决定对boost库进行更高的抽象和封装,对开发者提供一种更为便利的使用接口。 本代码实现了一下主要功能: 1.、为每个TCP客户端建立session,每个session创建事件,向应用开发则投递事件。 事件...
找c++工作常常会问你一些关于网络编程和多线程编程的相关知识,boost作为c++标准库的预备军,使用boost.asio对于c++开发人员是很好的选择,Boost.Asio C++ Network Programming详细介绍了使用boost.asio进行网络编程...