首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Asio 核心概念跟功能文档学习(一)

2012-09-28 
Asio 核心概念和功能文档学习(一)基本Asio解剖Asio在I/O对象例如sockets上完成操作,即可是同步操作也可是

Asio 核心概念和功能文档学习(一)
基本Asio解剖

Asio在I/O对象例如sockets上完成操作,即可是同步操作也可是异步操作。在开始使用Asio以前,了解Asio多个部分,你的程序,以及他们怎么一起工作的的概念图非常有用的。

我们考虑当你在一个socket上执行一个连接操作时都发生了些什么作为一个引导的例子。我们可以通过考察同步操作开始。

Asio 核心概念跟功能文档学习(一)

Your program(你的程序)会至少有一个io_service对象。io_service表示your program(你的程序)到operating system(操作系统)的I/O服务的纽带。 

1.Your program(你的程序)通过调用I/O对象初始化连接:

socket.async_connect(server_endpoint, your_completion_handler);

这里your_completion_handler是一个函数或函数对象有如下的签名:

void your_completion_handler(const asio::error_code& ec);

需要的准确的签名根据执行的异步操作不同而不同。参考手册表明了每种操作相应的格式。

2.I/O对象转发请求给io_service

3.io_serviceoperating system(操作系统)发信号,告诉它应该开始一个异步连接。

时间流逝。(在同步的情形中这里会等待整个连接操作的时间。)

Asio 核心概念跟功能文档学习(一)

4.operating system(操作系统)把结果放置在准备被io_service对象拾取的队列中表明连接操作已经完成。

5.Your program(你的程序)必须调用io_service::run()(或者一个类似的io_service成员方法)来获取结果。当有未完成的异步操作时,调用io_service::run()会阻塞,所以你通常尽快调用它一旦开始了第一个异步操作。

6.在io_service::run()内部,io_service将运行结果出列,把它翻译为一个error_code,然后把它传给your completion handler。这只是Asio怎样运行的简化图。如果你的需求更高级,你可能想要深入文档,例如扩展Asio来执行其他异步操作。

热点排行