gpt4 book ai didi

c++ - boost asio io_service 调度与发布

转载 作者:IT老高 更新时间:2023-10-28 12:43:11 25 4
gpt4 key购买 nike

谁能告诉我 io_service dispatch 之间的区别和 post ?我不清楚什么更适合我的问题。

我需要在另一个处理程序中调用一个处理程序,但我不知道要使用什么 invoker

最佳答案

嗯,这取决于调用的上下文,即它是从 io_service 内部运行还是不运行:

  • post 永远不会直接调用该函数,而是推迟调用。
  • dispatch 如果 dispatch-caller 是从 io_service 本身调用的,将立即调用它,否则将其排队。

所以,这取决于调用 post/dispatch 的函数,以及是否可以立即调用给定的处理程序。

这是什么意思:

... 是 dispatch 最终可能会再次调用您的代码(当然,这取决于您的应用程序以及您如何链接调用),但通常您应该确保您的回调是如果您使用 dispatch,则可重入。

dispatch 因此更快,因为它尽可能避免排队调用。它带有一些注意事项,因此您可能需要偶尔或始终使用 post(如果您想安全地使用它并且负担得起的话)。

更新

为了合并@gimpf 的已删除答案中的一些内容,较旧的 bo​​ost 版本具有这种调度实现(我的评论):

template <typename Handler>
void dispatch(Handler handler)
{
if (call_stack<win_iocp_io_service>::contains(this)) // called from within io_service?
boost_asio_handler_invoke_helpers::invoke(handler, &handler); // invoke rightaway
else
post(handler); // queue
}

关于c++ - boost asio io_service 调度与发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com