c++ - 将 boost::asio io_service 用于具有周期性任务的线程池?

标签 c++ boost threadpool boost-asio

我找到了使用 boost 创建线程池的秘诀:http://think-async.com/Asio/Recipes .我让它运行起来并且有效。但是,我有任务发生,比方说,所有 50 毫秒。

现在,一种解决方案是占用一个线程,每 50 毫秒将这样的任务添加到线程池,即 io_service。如果没有额外的线程,我真的想不出如何做到这一点。有人可以试试吗?

最佳答案

一种方法是使用 deadline timer(参见 http://www.boost.org/doc/libs/release/doc/html/boost_asio/tutorial/tuttimer2.html)。

但是,这取决于您的 io_service 还有哪些其他任务。例如,如果您将相对较快的功能调度到io_service,那么您一定要使用deadline_timer。但是,如果您安排非常长的任务并要求此周期性超时处理程序或多或少以相等的间隔执行,您有两种可能性:

  1. 提供足够的线程(多个线程可以同时调用 io_service::run() 方法,与您链接中的示例完全一样)

  2. 在专用线程中处理您的计时器

关于c++ - 将 boost::asio io_service 用于具有周期性任务的线程池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12024857/

相关文章:

WPF、MVVM 和异步工作

Node.js 单线程 VS Tranditonal Web 服务器线程池

java - 如何监控 AWS 中的线程

c++ - 将函数名称从 C++ Dll 导出到 Delphi

c++ - 如何在复合键控提升多索引容器的一个键上执行 equal_range 并在第二个键上执行 lower_bound?

c++ - 处理套接字断开连接。 boost/Winsock

c++ - 从 Howard Hinnant 的日期库中提取日期和时间

c++ - 如何在 C++ 中检查飞机座位预订

C++ 运行时终止 std::out_of_range

c++ - 如何将 boost::Makevariantover 转换为 vector