Exception 如何使用boost::asio::io_服务::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);

我正在阅读,对功能块的含义感到困惑。阻止了什么,在哪里定义了处理程序

我正在阅读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();
将阻止,直到发布其他操作

我正在阅读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()的实现似乎会无限期地阻塞。您可能应该提出一个更清楚的问题:)请看这里: