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

news/2024/7/7 19:35:04

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

在这里插入图片描述

一、前言

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

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

二、问题回答

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

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

Ⅱ、什么是回调函数

#include <iostream>

// 定义一个回调函数类型
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;
}

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

操作结果是: 30

如果你运行上述的 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类的编写与解析

五、最后

求赞!


http://lihuaxi.xjx100.cn/news/1557868.html

相关文章

【JDK 8-集合框架进阶】6.3 foreach

一、foreach 1. JDK8之前集合遍历的方式 2. Jdk8 里面的新增接口 二、注意点 三、实战 > 执行结果 一、foreach 1. JDK8之前集合遍历的方式 for 循环 迭代器 Iterator 2. Jdk8 里面的新增接口 使用场景&#xff1a;用于遍历&#xff0c;如 打印信息等 default voi…

VUE3中defineExpose的使用方法

使用 <script setup> 的组件是默认关闭的——即通过模板引用或者 $parent 链获取到的组件的公开实例&#xff0c;不会暴露任何在 <script setup> 中声明的绑定。 可以通过 defineExpose 编译器宏来显式指定在 <script setup> 组件中要暴露出去的属性 官网传…

Python 数独求解器

文章目录 使用回溯算法在Python中解决数独总结 Sudoku&#xff08;数独&#xff09;是一种基于逻辑的数字填充谜题游戏&#xff0c;最受喜爱的是那些热爱逻辑和推理的人。解决数独谜题有助于提高集中注意力和逻辑思维能力。 本文介绍了如何使用Python解决数独谜题。 使用回溯算…

C语言学习:14、递归函数

所谓递归&#xff0c;就是函数自己调用自己 递归就是将大问题分解成小问题&#xff0c;分而治之&#xff1b; 递归分解的是有限的问题&#xff0c;无限的问题就不能递归了,会导致程序崩溃。 //数列求和 //Sn a1 a1 ... an //Sn Sn-1 an, S1 a1 程序示例1&#xff1a;求…

力扣刷题:寻找两个正序数组的中位数、最长回文子串

今日刷题又开始了 一、寻找两个正序数组的中位数 题目链接&#xff1a;https://leetcode.cn/problems/median-of-two-sorted-arrays/ 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法…

Postman应用——Headers请求头设置

文章目录 Header设置Header删除或禁用Header批量编辑Header预设添加 一般在接口需要校验签名时&#xff0c;Headers请求头用来携带签名和生成签名需要的参数&#xff0c;在Postman也可以设置请求头在接口请求时携带参数。 Header设置 说明&#xff1a; Key&#xff1a;Header…

按月统计数据——mysql实现

业务场景 对某类业务数据&#xff0c;按月统计数量&#xff0c;返回当年各个月份的任务数量。 思路 按照创建时间&#xff0c;格式化为yyyy-mm的month字段&#xff0c;然后根据month进行分组查询&#xff0c;统计count作为数量 SELECT DATE_FORMAT(create_time, %Y-%m) AS mon…

面向面试知识--Lottery项目

面向面试知识–Lottery项目 1.设计模式 为什么需要设计模式&#xff1f; &#xff08;设计模式是什么&#xff1f;优点有哪些&#xff1f;&#xff09; 设计模式是一套经过验证的有效的软件开发指导思想/解决方案&#xff1b;提高代码的可重用性和可维护性&#xff1b;提高团…