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

news2025/1/11 1:46:37

定时器类的编写与解析 —— 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://www.coloradmin.cn/o/1013857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

坦克大战设计与实现

摘 要 J2SE是近年来随着各种不同技术的发展&#xff0c;尤其是编程语言飞速发展而诞生的一项新的开发语言。随着信息技术的飞速发展&#xff0c;计算机的使用也日渐普及&#xff0c;本文从实际应用出发&#xff0c;向大家介绍坦克大战游戏的设计与实现。Eclipse平台模拟器开发调…

华为数通方向HCIP-DataCom H12-831题库(单选题:21-40)

第21题 R3与R1的IS-IS邻居没有建立,根据本图的信息,可能的原因是? A、R3与R1的IIH认证失败 B、R3与R1的System ID重复 C、R3与R1的IS-Level不匹配 D、R3与R1的互连接口circuit-type不匹配 答案: A 解析: 从图中的Bad Authentiaction 信息可以看出R3与R1的IIH认证失败失败…

一生一芯16——安装pandoc使jupyter notebook转pdf

目的 希望导出jupyter notebook文档翻译 从这里导出pdf&#xff0c;但显示我没有安装pandoc&#xff0c;故安装pandoc 安装Pandoc 下载对应安装包 https://github.com/jgm/pandoc/releases 下载完成后&#xff0c;在目录中运行程序如下&#xff1a; 你需要解压下载的文件。…

windows10使用wheel安装tensorflow2.13.0/2.10.0(GPU版本) (保姆级教程)

安装过程 安装虚拟环境安装virtualenv安装满足要求的python版本使用virtualenv创建指定python版本的虚拟环境 安装tensorflow安装tensorflow-docs直接下载使用wheel下载 在VSCode编辑器中使用虚拟环境下的python解释器&#xff0c;并使用tensorflow常见错误 注意&#xff1a; t…

Python stomp 发送消息无法显示文本

我们向消息服务器通过 stomp 发送的是文本消息。 当消息服务器发送成功后&#xff0c;消息服务器上的文本没有显示&#xff0c;显示的是 2 进制的数据。 如上图&#xff0c;消息没有作为文本来显示。 问题和解决 消息服务器是如何判断发送的小时是文本还是二进制的。 根据官…

API接口文档管理系统平台搭建(更新,附系统源码及教程)

简介 这是一款简洁大方的API接口文档管理系统&#xff0c;附系统源码及教程方法。可以轻松管理和使用API接口。 安装步骤 打开config/database.php配置数据库信息导入数据库data.sql设置运行目录为/public伪静态设置think PHP后台地址/admin/login.html 账号&#xff1a;adm…

【算法与数据结构】669、LeetCode修剪二叉搜索树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;450、LeetCode删除二叉搜索树中的节点两道题的思路几乎是一样的&#xff0c;只不过终止条件和单层递归…

#循循渐进学51单片机#定时器与数码管#not.4

1、熟练掌握单片机定时器的原理和应用方法。 1&#xff09;时钟周期&#xff1a;单片机时序中的最小单位&#xff0c;具体计算的方法就是时钟源分之一。 2&#xff09;机器周期&#xff1a;我们的单片机完成一个操作的最短时间。 3)定时器&#xff1a;打开定时器“储存寄存器…

前端-layui动态渲染表格行列与复杂表头合并

说在前面&#xff1a; 最近一直在用layui处理表格 写的有些代码感觉还挺有用的&#xff0c;顺便记录下来方便以后查看使用&#xff1b; HTML处代码 拿到id 渲染位置表格 <div class"layui-table-body salaryTable"><table class"layui-table" i…

Faunadb入门

Faunadb和google spanner都属于云分布式数据库天然支持分片(无需做分表分库操作&#xff0c;一库搞定&#xff0c;当然价格另说)&#xff0c;国内的也有比如TiDB Oceanbase等 本文使用java语言&#xff0c;其他语言可以跳过&#xff1b;有想直接使用的可以参考(无法访问外网&…

uniapp开发h5,解决项目启动时,Network: unavailable问题

网上搜了很多&#xff0c;发现都说是要禁用掉电脑多余的网卡&#xff0c;这方法我试了没有好&#xff0c;不晓得为啥子&#xff0c;之后在网上看&#xff0c;uniapp的devServer vue2的话对标的就是webpack4的devserver&#xff08;除了复杂的函数配置项&#xff09;&#xff0c…

牛客: BM5 合并k个已排序的链表

牛客: BM5 合并k个已排序的链表 文章目录 牛客: BM5 合并k个已排序的链表题目描述题解思路题解代码 题目描述 题解思路 合并链表数组中的前两条链表,直到链表数组的长度为一, 返回这个唯一的链表 题解代码 package main/** type ListNode struct{* Val int* Next *ListN…

一个十分好用且美观的vue3后台管理系统框架

给大家推荐一个十分好用且美观的vue3后台管理系统框架 码云地址 项目完全开源&#xff0c;另外还给想学习框架搭建的同学&#xff0c;准备了学习视频&#xff0c;价格美丽&#xff0c;保证物美价廉。 试看视频 项目技术栈 Vue3Vite4Typescript5piniaelement plusUnocsspnp…

Git的基本操作:分支管理

8 分支管理 这里主要体现的git的功能的分离&#xff0c;这才是真正的git吧。每一个分支都是一个单独的可以分离的工作单位。每个用户可以建立不同的分支进行工作&#xff0c;最终提交到同一个开发分支上。一个用户可以建立不同的分支实现不同的功能&#xff0c;最终提交到同一…

CPU的三级缓存

CPU缓存&#xff08;Cache Memory&#xff09;是位于CPU与内存之间的临时存储器&#xff0c;它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾&#xff0c;因为CPU运算速度要比内存读写速度快很多&#…

Python语言学习实战-内置函数filter()的使用(附源码和实现效果)

实现功能 filter()函数是Python的内置函数之一&#xff0c;用于过滤序列中的元素。它接受两个参数&#xff1a;一个是函数&#xff0c;用于判断每个元素是否符合条件&#xff1b;另一个是可迭代对象&#xff0c;包含要过滤的元素。filter()函数返回一个迭代器&#xff0c;其中包…

Spring MVC里的DispatchServlet(结合Spring官网翻译)

Spring MVC里的DispatchServlet 前言1.Spring Web MVC1.1 DispatcherServlet&#xff08;中央调度器&#xff09;1.1.1 Context Hierarchy&#xff08;上下文层次结构&#xff09;1.1.2 Special Bean Types&#xff08;特定的bean类型&#xff09;1.1.3 Web MVC Config1.1.4 Se…

c++基础第三章:数值类型

数值类型 int类型最大最小值 INT_MIN :最小值 INT_MAX &#xff1a;最大值unsigned int 类型最大是&#xff1a; UINT_MAXlong类型的最大最小 LONG_MIN LONG_MAX 无符号的long类型大小 ULONG_MAXlong long 类型大小 LLONG_MIN LLONG_MAX 无符号类型 ULLONG_MAX 整型&am…

npm常用命令系统介绍

npm常用命令系统介绍 npm helpnpm initpackage.json 文件package.json 文件属性说明默认 package.json 文件--参数[-yes|-y]设置 package.json 中字段的默认值package-lock.json 文件 npm [config|c]设置源 npm [install|i]可选参数&#xff1a;全局安装的特性 包的删除npm uni…

蓝桥杯 题库 简单 每日十题 day1

01 空间 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝准备用 256MB 的内存空间开一个数组&#xff0c;数组的每个元素都是 32 位 二进制整数&#xff0c;如果不考虑程序占用的空间和维护内存需要的辅助空间&#xff…