参考来源https://www.gamedev.net/blogs/entry/2249317-a-guide-to-getting-started-with-boostasio/
Example 1a
#include <iostream>
#include <asio.hpp>
int main(int argc,char * argv[]){
asio::io_service io_service;
io_service.run();
std::cout<<"display"<<std::endl;
return 0;
}
结果输出:
test.png
Example 1b
#include <iostream>
#include <asio.hpp>
int main(int argc,char * argv[]){
asio::io_service io_service;
asio::io_service::work work(io_service);
io_service.run();
std::cout<<"display"<<std::endl;
return 0;
}
程序会阻塞在run函数中。结果输出:
work.png
Example 1c
#include <iostream>
#include <asio.hpp>
int main(int argc,char * argv[]){
asio::io_service io_service;
io_service.poll();
std::cout<<"display"<<std::endl;
return 0;
}
结果输出:
image.png
Example 1d
#include <iostream>
#include <asio.hpp>
int main(int argc,char * argv[]){
asio::io_service io_service;
asio::io_service::work work(io_service);
io_service.poll();
std::cout<<"display"<<std::endl;
return 0;
}
相比调用run(),程序并不会会阻塞。结果输出:
image.png
Example 1e
#include <iostream>
#include <asio.hpp>
int main(int argc,char * argv[]){
asio::io_service io_service;
std::shared_ptr<asio::io_service::work> work(
new asio::io_service::work(io_service));
work.reset();
io_service.run();
std::cout<<"display"<<std::endl;
return 0;
}
清空对象后,程序并不阻塞。
image.png
Example 1f
#include <iostream>
#include <asio.hpp>
#include <pthread.h>
asio::io_service io_service;
void *workerThread(void * arg){
std::cout<<pthread_self()<<" start"<<std::endl;
io_service.run();
std::cout<<pthread_self()<<" end"<<std::endl;
return (void *)0;
}
int main(int argc,char * argv[]){
std::shared_ptr<asio::io_service::work> work(
new asio::io_service::work(io_service));
std::cout<<"Press Enter to exit"<<std::endl;
pthread_t ntid[4];
for(int i=0;i<4;i++)
{
pthread_create(&ntid[i],NULL,workerThread,NULL);
}
std::cin.get();
io_service.stop();
for(inti=0;i<4;i++){
pthread_join(ntid[i],NULL);
}
return 0;
}
结果如下
image.png