对于具有周期性任务的线程池使用boost :: asio io_service?

时间:2012-08-19 07:06:55

标签: c++ boost threadpool boost-asio

我找到了这个用boost创建线程池的方法:http://think-async.com/Asio/Recipes。我让它运行,它的工作原理。但是,我完成的任务就是50毫秒。

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

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是使用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. 在专用线程中处理您的计时器