
Even though the exception is caught it causes both the socket thread and the acceptor thread to exit. For example, if I have 2 threads running, with both boost::asio::ip::tcp::acceptor::async_accept and boost::asio::ip::tcp::socket::async_read_some operations outstanding, then if I call StopThread in the code shown below I would expect only one thread to exit. void IoServiceRunner::ThreadFn() { try { ioService_.run(); } catch (StopThreadException& ex) { std::cout << "StopThreadException occurred" << std::endl; } catch (std::exception& ex) { std::cout << "Exception occurred" << ex.what() << std::endl; } catch (...) { std::cout << "Unknown exception occurred"); } } void IoServiceRunner::StopThread() { ioService_.post(boost::bind(&IoServiceRunner::NullThreadFn, this)); } void IoServiceRunner::NullThreadFn() { throw StopThreadException(); } From: Felipe Magno de Almeida Sent: Wed 08/11/2006 16:13 To: boost@lists.boost.org Subject: Re: [boost] asio & variable number of worker threads Just catch the exception and exit the thread gracefully. On 11/8/06, Chris Richards <chris.richards@yellowfeather.co.uk> wrote:
I have implemented a simple tcp server using asio. I wish to be able to dynamically add and remove threads from the io_service thread pool, so that when the server is heavily loaded it can be given more threads to cope with the load, but when the load reduces it can release the threads back to the OS.
I've tried posting to the io_service a handler which just throws an exception so that the thread exits, but it also resets the tcp connection and causes the acceptor thread to exit as well.
Is there a way of cleanly stopping just a single io_service::run method which would then cause the thread to exit? _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
-- Felipe Magno de Almeida _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost