пытался решить эту проблему, с которой я столкнулся в отношении объекта io_service.Код, о котором идет речь, выглядит так:
void connect_handler(const error_code &ec,iterator iterator){
cout<<"Connect handler"<<endl;
}
void resolver_handler(const error_code &ec,iterator iterator,boost::asio::io_service &io){
cout<<"Resolver handler..."<<endl;
boost::asio::ip::tcp::socket socket(io);
boost::asio::async_connect(socket,iterator,&connect_handler);
}
int main(){
boost::asio::io_service io;
resolver resolver(io);
resolver::query query("example.com","http");
resolver.async_resolve(query,boost::bind(resolver_handler,boost::asio::placeholders::error,boost::asio::placeholders::iterator,boost::ref(io)));
cout<<io.run()<<endl;
return 0;
}
Попробовал то же самое в другом простом примере, когда все работает так, как задумано:
void printTwo(const error_code& ec,boost::asio::deadline_timer &timer,boost::asio::io_service &io){
cout<<"print two"<<endl;
}
void printOne(const error_code& ec,boost::asio::deadline_timer &timer,boost::asio::io_service &io){
cout<<"print one"<<endl;
timer.async_wait(boost::bind(printTwo,boost::asio::placeholders::error,boost::ref(timer),boost::ref(io)));
}
int main(int argc, char** argv) {
boost::asio::io_service io;
boost::asio::deadline_timer timer(io,boost::posix_time::seconds(3));
timer.async_wait(boost::bind(printOne,boost::asio::placeholders::error,boost::ref(timer),boost::ref(io)));
cout<<io.run()<<endl;
return 0;
}
Я предполагаю, что сервисный объект блокируется до тех пор, покаработа сделана;также поток, вызывающий функцию run, является потоком, из которого вызываются функции обработчика.Итак, почему второй блок кода работает так, как задумано, а не первый?заранее спасибо.