原則上將會在處理完所有的異步請求以后返回,具體內部是某個變量控制的。
可以通過:
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處理完所有異步請求就會返回了