io_service::work类可以使io_service::run函数在没有任务的时候仍然不返回,直至work对象被销毁。
#include <boost/asio.hpp>
#include <iostream>
using namespace std;
void test_asio_nowork()
{
boost::asio::io_service ioser;
cout<<"[test_asio_nowork]"<<"ioser before"<<endl;
ioser.run();
cout<<"[test_asio_nowork]"<<"ioser after"<<endl;
}
void test_asio_work()
{
boost::asio::io_service ioser;
// 增加一个work对象
boost::asio::io_service::work work(ioser);
cout<<"[test_asio_work]"<<"ioser before"<<endl;
// 当没有任务时,ios.run()也不会马上返回
ioser.run();
cout<<"[test_asio_work]"<<"ioser after"<<endl;
}
int main()
{
test_asio_nowork();
test_asio_work();
return 0;
}
test_asio_nowork()执行结果:
[test_asio_nowork]ioser before
[test_asio_nowork]ioser after
test_asio_work()的执行结果:
[test_asio_work]ioser before
没有任务时, 也会阻塞.
【参考资料:http://blog.csdn.net/huang_xw/article/details/8471057】