On 14/01/2014 13:26, Quoth Kenneth Adam Miller:No, that would make it block forever.
Would it work better if it was threads.join_all() then ioServices.stop()?
You must do one of the following:
1. create an io_service.
2. create an io_service::work.
3. create threads for your thread_group.
4. at any time after this, post work to the service.
5a. only on shutdown, call stop() and join_all(), in that order. Note that this may result in some posted work not getting called, and therefore some resources not cleaned up.
5b. OR instead of calling stop(), destroy the io_service::work you created earlier (and if you're using ASIO async operations, you must also cancel or close anything outstanding that you don't want to wait for), and then call join_all(). this will block until all posted work is completed.
OR
1. create an io_service.
2. post work to the service. (can only be done here, or from inside a callback called by the service)
3. create threads for your thread_group.
4. call join_all(), which will block until all pending work is done.
The former lets you make a threadpool you can keep around for the life of your app, and post work as desired. The latter lets you make a threadpool to execute a single blocking task with multiple concurrent subtasks.
(Other variations are possible of course but the order of the above is important.)
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users