原則上將會在處理完所有的異步請求以后返回,具體內(nèi)部是某個(gè)變量控制的。
可以通過:
boost::asio::io_service io_service;
boost::asio::io_service::work work(io_service);
work構(gòu)造以后會讓io_service內(nèi)部的某個(gè)控制變量自增這樣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就會一直執(zhí)行不會返回
...
spWork.reset();// reset會導(dǎo)致內(nèi)部的work析構(gòu),析構(gòu)以后io_service里邊的控制量就會正常。run處理完所有異步請求就會返回了