asio::executor_work_guard原理&使用

从executor_work_guard.hpp可知,executor_work_guard的构造和析构分别调用了 executor_.on_work_started(); 和 executor_.on_work_finished();

 

executor_是executor_work_guard绑定的io_context对象

 

而on_work_started 才是真正保证即使 io_context中没有任务的时候,run也不退出的关键

 

所以我们可以通过操控executor_work_guard生命周期的方法,来控制run什么时候退出

 

1 for (std::size_t i = 0; i < pool_size; ++i)
2{
3     io_context_ptr io_context(new boost::asio::io_context);
4     io_contexts_.push_back(io_context);
5     work_.push_back(boost::asio::make_work_guard(*io_context));
6}

 

posted @ 2020-09-18 11:39  FL1188  阅读(2792)  评论(0)    收藏  举报