Exception 如何使用boost::asio::io_服务::run_one()
我正在阅读,对功能块的含义感到困惑。阻止了什么,在哪里定义了处理程序 我正在阅读boost::asio::io_service::run_one(),对函数块的含义感到困惑。什么被封锁了 阻塞意味着Exception 如何使用boost::asio::io_服务::run_one(),exception,boost,boost-asio,handler,Exception,Boost,Boost Asio,Handler,我正在阅读,对功能块的含义感到困惑。阻止了什么,在哪里定义了处理程序 我正在阅读boost::asio::io_service::run_one(),对函数块的含义感到困惑。什么被封锁了 阻塞意味着run\u one()阻塞直到完成一个处理程序 处理程序在哪里定义 不是。处理程序是服务中挂起的任何操作。因此,如果你这样做: void foo() { /*.... */ } void bar() { /*.... */ } io_service svc; svc.post(foo);
run\u one()
阻塞直到完成一个处理程序
处理程序在哪里定义
不是。处理程序是服务中挂起的任何操作。因此,如果你这样做:
void foo() { /*.... */ }
void bar() { /*.... */ }
io_service svc;
svc.post(foo);
svc.post(bar);
现在你第一次打电话
svc.run_one();
阻塞,直到foo
完成。第二次
svc.run_one();
将一直阻止,直到条
完成。之后,run_one()
将不会阻塞,只返回0。如果您让服务留在附近,例如:
io_service::work keep_around(svc);
svc.run_one();
将阻止,直到发布其他操作
我正在阅读boost::asio::io_service::run_one(),对函数块的含义感到困惑。什么被封锁了
阻塞意味着run\u one()
阻塞直到完成一个处理程序
处理程序在哪里定义
不是。处理程序是服务中挂起的任何操作。因此,如果你这样做:
void foo() { /*.... */ }
void bar() { /*.... */ }
io_service svc;
svc.post(foo);
svc.post(bar);
现在你第一次打电话
svc.run_one();
阻塞,直到foo
完成。第二次
svc.run_one();
将一直阻止,直到条
完成。之后,run_one()
将不会阻塞,只返回0。如果您让服务留在附近,例如:
io_service::work keep_around(svc);
svc.run_one();
将一直阻止,直到发布其他操作。您能详细说明上一个用例吗?链接的文档会,另请参阅。简短的总结是,
run*()
和poll*()
总是在所有工作完成后返回<代码>工作是一种“人造”工作,可以防止这种情况发生。它本质上与答案无关,只是添加了它,因为它表明run\u one()
可能会无限期地阻塞,而不仅仅是运行特定任务的时间。对不起,您对链接文档有更清楚的解释吗?我可能不完全理解它,而且我对run_one()的实现似乎会无限期地阻塞。您可能应该提出一个更清楚的问题:)请看这里:您能详细说明上一个用例吗?链接的文档确实如此,另请参阅。简短的总结是,run*()
和poll*()
总是在所有工作完成后返回<代码>工作是一种“人造”工作,可以防止这种情况发生。它本质上与答案无关,只是添加了它,因为它表明run\u one()
可能会无限期地阻塞,而不仅仅是运行特定任务的时间。对不起,您对链接文档有更清楚的解释吗?我可能不完全理解它,而且我对run_one()的实现似乎会无限期地阻塞。您可能应该提出一个更清楚的问题:)请看这里: