2015-02-20 4 views
2

Вот проблема:Как сделать присоединение к boost :: asio :: io_service?

В главном потоке (ИО - повышение :: ASIO :: io_service):

io.post(functor1, callback1) 
.... 
io.post(functorN, callbackN) 

io.join() <--- waiting while all the task to be processed and continue to execute the program 

код выполняется в цикле. boost::thread_group будет идеально соответствовать, но он создает новые потоки все время, в то время как я хочу создавать рабочие потоки только один раз и отправлять им задачи, как это делает asio. Все потоки пула, которые я видел, являются просто обтекателями вектора потоков + io_service, его нельзя использовать так, как я показал выше.

Итак, как я могу «присоединиться» к boost :: asio?

+0

Как вы работаете работу в очереди IO службы? Использование run() или poll()? Используете ли вы какие-либо объекты io_service :: work? –

+0

Я использую '' work''. Я создаю несколько потоков '' thread_group'' и вызываю '' run() '' внутри каждого рабочего потока. – fogbit

ответ

0

Так,

work_.reset(); 
thread_group_.join_all(); 

должно быть достаточно. Обычный подход заключается в

boost::unique_ptr<io_service::work> work_; // non-copyable 

или

boost::optional<io_service::work> work_; // copyable 
Смежные вопросы