asio是boost提供的一个c++异步编程模型库,其核心类io_service,在多线程编程里面提供了任务队列和任务分发功能,
在socket、io编程里主要作为一个事件驱动器(完成端口、select、poll、epoll等)。
调用run成员函数。run函数将阻塞直到所有任务完成 并且没有任何处理器被分发,或者直到io_service被停止。
#include <boost/asio.hpp>
#include <iostream>
int main( int argc, char * argv[] )
{
boost::asio::io_service io_service;
io_service.run();
std::cout << "io_service is done !" << std::endl;
return 0;
}
创建一个work类。work类在有任务运行时通知io_service。当io_service有一个任务对象与其关联,它将不会停止运行。
#include <boost/asio.hpp>
#include <iostream>
int main( int argc, char * argv[] )
{
boost::asio::io_service io_service;
boost::asio::io_service::work work( io_service );
io_service.run();
std::cout << "io_service not end" << std::endl;
return 0;
}
poll函数在没有任务运行时候不会阻塞。poll函数执行当前任务组并且返回。
#include <boost/asio.hpp>
#include <iostream>
int main( int argc, char * argv[] )
{
boost::asio::io_service io_service;
for( int x = 0; x < 10; ++x )
{
io_service.poll();
}
return 0;
}
io_service移除一个work对象。通过查看文档,没有函数提供此种功能。为了实现此种功能,我们必须使用work对象的智能指针。
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <iostream>
int main( int argc, char * argv[] )
{
boost::asio::io_service io_service;
boost::shared_ptr< boost::asio::io_service::work > work(
new boost::asio::io_service::work( io_service )
);
work.reset();//移除
io_service.run();
return 0;
}