是否可以在同一个boost :: asio :: deadline_timer上多次调用async_wait?
我的意思是如下:
t->expires_from_now(delay);
t->async_wait(f1);
t->async_wait(f2);
这是否确保将调用这两个函数? 这是否确保按此顺序调用这两个函数?
如果没有,任何想法如何在定时器超时时连续调用f1和f2? (我不关心在调用f1和f2之间是否执行了另一个处理程序。)
另一个问题:如果设置两个定时器t1和t2使得t1的截止时间在t2的截止时间之前,我可以确定在与t2相关联的处理程序之前将调用与t1相关联的处理程序吗? (在这种情况下,对于上面的代码,我只是为f2创建第二个定时器,其延迟略大于第一个定时器设置的延迟)。
由于
答案 0 :(得分:6)
对于每次调用
async_wait()
,所提供的处理程序将被称为一次。
(强调我的)。这意味着在你的情况下,f1和f2都将被调用一次。
关于你的第二个问题:这取决于3个条件:
<强>更新强>
我刚才意识到你的第一个问题中有第二部分关于处理程序被调用的顺序。文件没有说明这一点。您可以在实施中查找,但这可能会改变
如果您希望按顺序执行两个函数,只需从第一个函数调用第二个函数。如果第二个处理程序只在某些条件下被“附加”到第一个处理程序,要么将调用延迟到async_wait
,直到你知道处理程序链的整个范围,或者只是使它们彼此独立。 />
第三种可能性是推出自己的可附加处理程序。但请记住,处理程序被复制到io_service::run
线程,即进入async_wait
调用,因此可附加处理程序只需要一个指向真实处理程序链的指针,它需要采用并发考虑到等等。