Asio_1

参考来源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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。