【发布时间】:2014-12-03 07:08:41
【问题描述】:
我正在查看 this 示例 5a - 它涵盖了使用 boost asio 进行的异常处理 该示例的代码从该链接粘贴到此处以供快速参考
boost::mutex global_stream_lock;
void WorkerThread( boost::shared_ptr< boost::asio::io_service > io_service )
{
....
try
{
io_service->run();
}
catch( std::exception & ex )
{
....
}
}
void RaiseAnException( boost::shared_ptr< boost::asio::io_service > io_service )
{
io_service->post( boost::bind( &RaiseAnException, io_service ) );
throw( std::runtime_error( "Oops!" ) );
}
int main( int argc, char * argv[] )
{
boost::shared_ptr< boost::asio::io_service > io_service(
new boost::asio::io_service
);
boost::shared_ptr< boost::asio::io_service::work > work(
new boost::asio::io_service::work( *io_service )
);
boost::thread_group worker_threads;
for( int x = 0; x < 2; ++x )
{
worker_threads.create_thread( boost::bind( &WorkerThread, io_service ) );
}
io_service->post( boost::bind( &RaiseAnException, io_service ) );
worker_threads.join_all();
return 0;
}
我的问题是为什么这里没有捕获异常?为什么作者必须同时使用error code 和try-catch 来捕获这样的异常
try
{
boost::system::error_code ec;
io_service->run( ec );
if( ec )
{
....
}
break;
}
catch( std::exception & ex )
{
....
}
我也不明白作者说的什么意思
再次进一步澄清我们是否正在为用户使用 io_service 工作,如果工作可以生成,我们必须使用异常处理 例外。如果我们将 io_service 用于 boost::asio 函数 只有,然后我们可以使用异常处理或错误变量作为 两者都可以。如果我们将 io_service 用于 boost::asio 功能和用户工作,那么我们可以使用这两种方法或只使用 异常处理方法,但不仅是错误变量,如果 工作可以产生异常。这应该很简单 跟随。
如果有人能澄清这一点,我将不胜感激
【问题讨论】:
标签: c++ boost boost-asio