http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio/
编译环境 boost1.59 vs2015
A guide to getting started with boost::asio
boost asio 学习指南
boost::asio是一个使用现代C++方法为开发者提供异步模型的跨平台的c++网络和
底层IO库.目前已经拥有大量用户并成为boost库的一部分
在开始之前,我们将浏览下boost::asio综述。它包括了很多我们必须知道的基本
信息。指南不会涉及整个boost库的复杂细节,他将指导我们学习如何在我们的程
序中使用ASIO。
本指南不会教授任何编程语言。读者必须熟悉C++并且熟练使用boost库,尤其是ASIO库。指南也不会教授网络编程。换句话说,本指南的目标是指导读者使用asio,但是依旧需要读者花费时间读取官方文档。
本指南示例是在windows下编译。如果代码需要移植,可能需要做一些逻辑上的改变。所有代码已经压缩并上传,没有包含工程文件,仅包含源码文件。代码依赖BOOST库。
1 io_service的基础
boost::asio的核心对象就是io_service.此对象类似于库的大脑和心脏。我们使用一个简单的示例来熟悉它,调用run成员函数。如果查看函数的文档说明,run函数将阻塞直到所有任务完成并且没有任何处理器被分发,或者直到io_service被停止。
代码示例1a
#include <boost/asio.hpp> #include <iostream> int main( int argc, char * argv[] ) { boost::asio::io_service io_service; io_service.run(); std::cout << "Do you reckon this line displays?" << std::endl; return 0; }
基于文档描述,我们期望文本会被打印。当我们运行程序时,我们得到了预期的效果,我们看见了这行文本。
我们将创建一个任务类,任务类在有任务运行时通知io_service。换句话说,当io_service有一个任务对象与其关联,它将不会停止运行。下个示例验证这个说法。
代码示例1b
#include <boost/asio.hpp> #include <iostream> int main( int argc, char * argv[] ) { boost::asio::io_service io_service; boost::asio::io_service::work work( io_service ); io_service.run(); std::cout << "Do you reckon this line displays?" << std::endl; return 0; }