原则上将会在处理完所有的异步请求以后返回,具体内部是某个变量控制的。
可以通过:
boost::asio::io_service io_service;
boost::asio::io_service::work work(io_service);
work构造以后会让io_service内部的某个控制变量自增这样run就不会返回了。
可以通过类似这样的技巧更漂亮的控制:
boost::asio::io_service asioService;
//boost::asio::io_service::work work(asioService);
boost::scoped_ptr<boost::asio::io_service::work> spWork(new boost::asio::io_service::work(asioService));
asioService.run(); // 这样run就会一直执行不会返回
...
spWork.reset();// reset会导致内部的work析构,析构以后io_service里边的控制量就会正常。run处理完所有异步请求就会返回了