io_service.run_one()的嵌套调用是否可能无法有效地使用boost :: asio。
例如,我有一个处理程序,它在套接字上收到某些内容后执行。 io_service在另一个使用io_service.run_one()的线程中运行。因此,在我看来,io_service将在提供接收处理程序后停止。
然后在接收处理程序中,我再次执行io_service.run_one(),以便现在通过套接字发回一些东西。这意味着,存在io_service.run_one()方法的嵌套/递归调用。
这种行为确实不起作用。我的意思是有时在run_one()方法中有一个块永远不会返回。我也找不到任何关于这种特殊情况的文件处理。
那么,是否允许执行递归/嵌套io_service执行或者这不是一个好的行为?
P.S。 io_service.reset()用于每次run_one()执行。
答案 0 :(得分:3)
据我所知,这既不是有用的,也不是asio中记载的,所以看起来安全的假设是:不,它无效。
现在,它可以在某些或所有平台上运行。但这并不一定会成为一个好主意。
此外,如果您打算不阻止处理程序,请致电run_one()
,您可能需要考虑poll_one()
。
无论哪种方式,这样做肯定听起来很可疑。据推测,您假设正在调度特定消息,以便您可以立即执行某些工作吗?我只能想到非常人为的例子,假设两个消息在asio消息队列中背靠背,这是一个安全的假设。