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

时间:2017-06-08 08:00:48

标签: exception boost boost-asio handler

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

1 个答案:

答案 0 :(得分:0)

  

我正在读取boost :: asio :: io_service :: run_one(),并且对功能块的含义感到困惑。什么被阻止

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

  

和处理程序在哪里定义?

不是。 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()将不会阻止,只返回0.如果您使服务保持不变,例如:

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

会阻止,直到发布其他一些操作。