要想实现异步操作,就需要提供一个环境,这个环境是
boost::asio::io_service io_service_;
io_service_.run();
但是io_service_.run(),是不阻塞的,这个环境是需要io_service_.run()阻塞运行的,于是需要改成这样
boost::asio::io_service io_service_;
boost::asio::io_service::work work_(io_service_);
io_service_.run();
用io_service构造出一个work之后,再执行io_service_.run();就是阻塞的了。但是主线程不可以阻塞,否则后面的代码没法执行了,于是需要继续改
boost::asio::io_service io_service_;
boost::asio::io_service::work work_(io_service_);
boost::thread th(run_io);
void run_io()
{
io_service_.run();
}
work: 可以防止io_service里注册的所有事件完成时退出事件循环。