第13章 网络 Page727~728 asio定时器例子:后创建的定时器先产生到点事件

代码:

第13章 网络 Page727~728 asio定时器例子:后创建的定时器先产生到点事件_第1张图片

第13章 网络 Page727~728 asio定时器例子:后创建的定时器先产生到点事件_第2张图片

35行,42行,51行,分别构造三个对象,

36行,43行,52行,设置了三个任务peng1、peng2、peng3,并将任务交给io_service对象(不需要ios的run()方法启动起来),然后将任务完成后的回调动作设置为函数对象。

当55行,ios的run方法启动起来,ios就开始运转了,三个任务的前四秒钟,是并行运行的,当操作系统完成任务后,会反馈一个事件给ios,如果ios这一会儿是空闲的,ios便开始执行回调动作。

运行效果:

第13章 网络 Page727~728 asio定时器例子:后创建的定时器先产生到点事件_第3张图片

调试:

第13章 网络 Page727~728 asio定时器例子:后创建的定时器先产生到点事件_第4张图片

在20行设置一个断点,可以看到调试开始后,过了几秒中之后,程序才停在了20行,这就印证了,操作先完成定时任务之后,才反馈一个事件,ios才开始处理这个事件,并调用回调动作。而且可以看到首先触发的回调动作是“炸弹2”

第13章 网络 Page727~728 asio定时器例子:后创建的定时器先产生到点事件_第5张图片

io_service类用于处理身上事件的方法:

除run()这一主要运转方法之外,io_service类还有三个可用于处理身上事件的方法:

run_one()

poll()

poll_one()

带有“_one”后缀的方法作用正如其名,一次调用最多只会执行一个事件(最少当然是零个)。run()和poll()的区别,留到后面再讲

当一个io_service对象正在执行run()、run_one()、poll()、和poll_one()中的任何一个方法时,我们称该io_service对象处于“运转”状态。为行文简洁,有时也会用run()函数代表全部四个运转函数。

你可能感兴趣的:(白话C++》第13章,网络,asio,《白话C++》学习,c++)