boost :: asio中post和dispatch有什么区别?

时间:2018-06-18 14:03:28

标签: c++ multithreading boost-asio threadpool asio

我正在尝试使用boost:asio库来创建线程池。官方文件说:

  

dispatch:请求io_service调用给定的处理程序。

     

post:请求io_service调用给定的处理程序并立即返回。

有人可以解释这两者有何不同吗?

2 个答案:

答案 0 :(得分:2)

Post确保调用post的线程不会立即尝试处理任务。

https://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/reference/io_service/post.html

  

但不允许io_service从内部调用处理程序   这个功能。

派遣没有这样的承诺;并且可以在函数返回时完成。

答案 1 :(得分:2)

差异是dispatch可以在其中运行handler(传递给它的CompletionHandler),这意味着你会在函数返回之前等待它完成,如果有的话。另一方面,post本身不会运行handler并立即返回呼叫站点。

因此,dispatch是可能阻止的通话,而post是非阻止通话。