asio封装了操作系统的select、poll/epoll、kqueue、overlapped I/O众多机制,实现了异步I/O模式。
asio库使用了大量的类和函数封装了socket API,提供了一个现代风格C++网络编程接口,支持TCP、ICMP、UDP等网络通信协议。asio库还支持串口读写、定时器、SSL等功能,而且asio还是一个富有弹性的框架。
核心类
io_service,asio的任何操作都有io_service的参与,io_service用于提交io请求并获取操作系统对io处理后的结果。
使用asio库程序的基本结构和流程:
一个分析简单使用asio同步和异步的例子后的图标[ 乱 ]
asio同步/异步机制分析图书
需要首先包含以下内容[ 若果要在vs2010下使用C++其它内容,则按照对应内容需求包含 ]
//避免VC下的警告 #ifdef _MSC_VER #define _WIN32_WINNT 0X0501 #endif #define BOOST_REGEX_NO_LIB #define BOOST_DATE_TIME_SOURCE #define BOOST_SYSTEM_NO_LIB #include <boost/asio.hpp> using namespace boost::asio;
建立一个vs2010的控制台程序,在主程序中在(1)后面追加以下代码
#include "stdafx.h" #include <iostream> #include <boost/asio.hpp> #include <boost/date_time/posix_time/posix_time.hpp> using namespace std; using namespace boost; using namespace boost::asio; //函数声明 void print( const boost::system::error_code &ec ); int _tmain(int argc, _TCHAR* argv[]) { io_service io_s; deadline_timer d_t( io_s, posix_time::seconds(1) ); cout << d_t.expires_at() << "\n"; d_t.async_wait( print ); cout << "\n定时继续,我输出"; io_s.run(); cout << "\n回调函数和程序中的代码谁先运行"; getchar(); return 0; } //回调函数 void print( const boost::system::error_code &ec ) { cout << "\n定时结束"; }
此段代码跟使用asio步骤中描述的一样。且看看运行结果验证一下某些结论:
图2 异步模式下运行结果
此次笔记记录完毕。