代码:
35行,42行,51行,分别构造三个对象,
36行,43行,52行,设置了三个任务peng1、peng2、peng3,并将任务交给io_service对象(不需要ios的run()方法启动起来),然后将任务完成后的回调动作设置为函数对象。
当55行,ios的run方法启动起来,ios就开始运转了,三个任务的前四秒钟,是并行运行的,当操作系统完成任务后,会反馈一个事件给ios,如果ios这一会儿是空闲的,ios便开始执行回调动作。
运行效果:
调试:
在20行设置一个断点,可以看到调试开始后,过了几秒中之后,程序才停在了20行,这就印证了,操作先完成定时任务之后,才反馈一个事件,ios才开始处理这个事件,并调用回调动作。而且可以看到首先触发的回调动作是“炸弹2”。
io_service类用于处理身上事件的方法:
除run()这一主要运转方法之外,io_service类还有三个可用于处理身上事件的方法:
run_one()
poll()
poll_one()
带有“_one”后缀的方法作用正如其名,一次调用最多只会执行一个事件(最少当然是零个)。run()和poll()的区别,留到后面再讲
当一个io_service对象正在执行run()、run_one()、poll()、和poll_one()中的任何一个方法时,我们称该io_service对象处于“运转”状态。为行文简洁,有时也会用run()函数代表全部四个运转函数。