zoukankan      html  css  js  c++  java
  • 高性能服务器开发之boost.asio实现原理

    本文其实并不长篇大论介绍boost.asio是怎样实现的,而只提供一个源代码。这个代码是笔者之前学习asio时写的demo版asio,从附带的例子看,代码和boost.asio有95%的相似度。不过demo只实现了windows iocp的部分,而且只有异步。代码很少,也就1000行吧,编译不依赖c11,但示例代码用到了c11的bind,boost.asio的初学者也许可以拿来参考,不具备项目使用价值。

    myasio代码下载

    以下是deadline_timer的示例,其它server、client等网络部分示例就不贴了

    #include <iostream>
    #include <functional>
    #include <asio/io_service.h>
    #include <asio/deadline_timer.h>
    
    void handle_timer(int error)  
    {  
        std::cout << "handle_timer: " << error << std::endl;
    }  
    
    void handle_wait(int error,  
                     asio::deadline_timer& t,   
                     int& count)  
    {  
        if(!error)  
        {  
            std::cout << "handle_wait: " << count << std::endl;  
    
            t.async_wait(1000, std::bind(handle_wait,   
                std::placeholders::_1,  
                std::ref(t),  
                std::ref(count)));  
            if (count++ == 10)  
            {  
                t.cancel();  
            }  
        }
        else
        {
            std::cout << "timer canceled" << std::endl; 
        }
    }  
    
    int main()
    {
        const int wait_millisec = 1000;
        asio::io_service io_service;
        asio::deadline_timer t1(io_service);
    
        int count = 0;
        t1.async_wait(wait_millisec, handle_timer);
    
        asio::deadline_timer t2(io_service);
        t2.async_wait(wait_millisec, std::bind(handle_wait,   
            std::placeholders::_1,  
            std::ref(t2),  
            std::ref(count)));
    
        io_service.run();
    
        std::cout << "end" << std::endl;
        std::cin.get();
        return 0;
    }
  • 相关阅读:
    (转) IOS ASI http 框架详解
    不是技术牛人 如何拿到IT巨头的Offer 来自作者: lsldd 来源: CSDN
    数据类型Block 粗解
    GCD的基本思想
    自定义Cell的 两种方法!
    全世界最幸运的我
    实现鸢尾花数据的读入
    Tensorflow2的基本用法
    6.17
    6.16
  • 原文地址:https://www.cnblogs.com/junye/p/6077806.html
Copyright © 2011-2022 走看看