アプリにio_service
オブジェクトが1つだけあり、スレッド化されている場合(以下のコードを参照)、非同期ハンドラーの1つが例外をスローするとどうなりますか。それはどのように伝播し、さらに重要なことに、それらを処理するための最良の方法は何ですか。
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シナリオを考慮していません。