如何使用 boost::asio::io_service::run_one()

How to use boost::asio::io_service::run_one()

我正在阅读 boost::asio::io_service::run_one() 并且对功能块的含义感到困惑。什么被阻止了,处理程序在哪里定义?

I was reading up on boost::asio::io_service::run_one() and am confused by what it means by the function block. What has been blocked

阻塞意味着 run_one() 阻塞直到它完成一个处理程序。

and where is the handler defined?

不是。 Logically it's described in the documentation。处理程序是服务中待处理的任何操作。所以,如果你这样做:

 void foo() { /*.... */ }
 void bar() { /*.... */ }

 io_service svc;
 svc.post(foo);
 svc.post(bar);

现在第一次打电话给

 svc.run_one();

阻塞直到 foo 完成。第二次

 svc.run_one();

将阻塞直到 bar 完成。在那之后,run_one() 不会阻塞,只是 return 0。如果你让服务保持不变,例如:

 io_service::work keep_around(svc);
 svc.run_one();

将阻止,直到发布其他操作。