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