如果一个应用程序只有一个io_service
对象并且是线程化的(参见下面的代码),如果其中一个异步处理程序抛出异常会发生什么。它是如何传播的,更重要的是处理它们的最佳方法是什么。
std::list< boost::shared_ptr< the_client > > clients_list;
for(int i = 0; i < n_threads; i++)
{
clients_list.insert(boost::make_shared< the_client >( io_service, server_host, server_port ));
}
for(unsigned int i = 0; i < n_threads; i++)
{
threads.create_thread(boost::bind(&boost::asio::io_service::run, boost::ref(io_service)));
}
for(std::list< boost::shared_ptr< the_client > >::iterator itr = clients_list.begin(); itr != clients_list.end(); ++itr)
{
(*itr)->connect_to_server_and_run_statemachine();
}
此处the_client::connect_to_server_and_run_statemachine()
设置与服务器的连接并启动异步连接处理。
我知道关于类似主题的问题,但这不考虑多线程 io_service 场景。