我正在阅读boost::asio::io_service::run_one(),并对功能块的含义感到困惑。什么被阻止以及处理程序定义在哪里?
答案 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();
会阻止,直到发布其他一些操作。