• 七、定时器类的编写与解析 —— TinyWebServer


    定时器类的编写与解析 —— TinyWebServer

    在这里插入图片描述

    一、前言

    定时器非常好写。就是链表加定时函数。搞懂他的作用就成。

    1. 定时器的作用是什么?
    2. 什么是回调函数?
    3. 用到的函数是什么?

    二、问题回答

    Ⅰ、定时器的作用是什么?

    处理非活跃的连接
    非活跃,是指客户端(这里是浏览器)与服务器端建立连接后,长时间不交换数据,一直占用服务器端的文件描述符,导致连接资源的浪费。

    Ⅱ、什么是回调函数

    #include 
    
    // 定义一个回调函数类型
    typedef void (*Callback)(int);
    
    // 执行操作的函数,接受两个整数和回调函数作为参数
    void performOperation(int x, int y, Callback callback) {
        int result = x + y;
        callback(result);
    }
    
    // 回调函数,用于处理操作结果
    void callbackFunction(int result) {
        std::cout << "操作结果是: " << result << std::endl;
    }
    
    int main() {
        // 使用回调函数执行操作
        performOperation(10, 20, callbackFunction);
        
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这个示例中,我们首先定义了一个回调函数类型 Callback,它接受一个整数作为参数并返回 void。然后,我们编写了 performOperation 函数,它接受两个整数和一个回调函数作为参数,执行操作后调用回调函数。最后,在 main 函数中,我们使用 performOperation 函数并传递了 callbackFunction 作为回调函数,当操作完成时,callbackFunction 将被调用,并输出操作结果。

    操作结果是: 30
    
    • 1

    如果你运行上述的 C++ 代码,它将输出以下结果:
    操作结果是: 30
    这是因为 performOperation 函数将输入的两个整数相加(10 + 20),得到结果 30,然后调用了 callbackFunction 回调函数,并将结果作为参数传递给它。回调函数 callbackFunction 接收到结果并将其打印到控制台上。因此,最终输出的内容是"操作结果是: 30"。

    Ⅲ、用到的函数是什么?

    • *time_t time(time_t _Nullable tloc);

      • 描述:返回的值 是从1970-01-01 00:00:00 +0000 (UTC)以来的秒数

    三、代码编写

    • client_data:

      • 成员变量:

        1. 地址
        2. 句柄
        3. 时间
    • util_timer:

      • 成员函数:

        1. 构造函数
      • 成员变量:

        1. 指向前一个节点的指针、指向后一个节点的指针
        2. 数据
        3. 回调函数
        4. 时间
    • sort_timer_lst:

      • 成员函数:

        1. 构造函数、析构函数
        2. 添加节点、调整节点、删除节点、调整节点位置
      • 成员变量:

        1. 头指针、尾指针
    • Utils:

    这个类,其实严格来说不放到定时器类中的。他这个是吧一些要用的整合到一起了。

    • 对文件描述符设置非阻塞
    • 将内核事件表注册读事件,ET模式,选择开启EPOLLONESHOT
    • 信号处理函数
    • 设置信号函数
    • 定时处理任务,重新定时以不断触发SIGALRM信号

    四、下期预告

    http类的编写与解析

    五、最后

    求赞!

  • 相关阅读:
    【初识Netty&使用Netty实现简单的客户端与服务端的通信操作&Netty框架中一些重要的类以及方法的解析】
    NC7 买卖股票的最好时机(一)
    LVGL V8.3 使用lvgl文件系统读取SD卡内容基于Arduino
    【黑马程序员pink名师讲CSS】学好CSS有这一篇就够了(CSS笔记)
    适配器模式
    Dubbo中的负载均衡算法之平滑加权轮询算法源码解析
    Hbase java API与过滤器
    Nacos环境隔离
    【JAVA springframework.http】如何发送HTTP请求
    【JavaEE&Spring】Spring Web MVC⼊⻔
  • 原文地址:https://blog.csdn.net/Ten_years_star/article/details/132913256