2013-06-20 2 views
0

Мне хотелось знать, как я могу заставить io сделать что-то вроде thread.join(), ожидая завершения всех задач.BOOST ASIO с помощью

io_type->post( strand->wrap(boost::bind &somemethod,ptr,parameter))); 

В приведенном выше коде, если первоначально были запущены 4 потока, это дало бы работу следующей доступной нити. Однако я хочу знать, как я могу дождаться завершения всех потоков. Как и в случае с threads.join().

+0

Не могли бы вы перефразировать свой вопрос? –

+0

только что обновил его – MistyD

ответ

1

Если это действительно нужно сделать, вы можете настроить мьютекс или критическую секцию, чтобы остановить обработку обработчиков Io от сокета. Это нужно активировать из другого потока. Но, что более важно ...

Возможно, вам стоит переосмыслить свой дизайн. Проблема с тем, что io ожидает окончания других потоков, заключается в том, что io будет неактуальным. В общем, не очень хорошая идея. Я подозреваю, что большинство разработчиков, работающих с сетевым программным обеспечением, даже не подумают об этом. Если вы получаете сообщения, которые еще не готовы к обработке, из-за другой обработки, которые происходят, подумайте о том, чтобы хранить их в очереди и обрабатывать их в другом потоке, когда другие потоки сигнализируют, что они завершили свою работу.

Смежные вопросы