定时器类的编写与解析 —— TinyWebServer
一、前言
定时器非常好写。就是链表加定时函数。搞懂他的作用就成。
- 定时器的作用是什么?
- 什么是回调函数?
- 用到的函数是什么?
二、问题回答
Ⅰ、定时器的作用是什么?
处理非活跃的连接
非活跃,是指客户端(这里是浏览器)与服务器端建立连接后,长时间不交换数据,一直占用服务器端的文件描述符,导致连接资源的浪费。
Ⅱ、什么是回调函数
#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:
-
成员变量:
- 地址
- 句柄
- 时间
-
-
util_timer:
-
成员函数:
- 构造函数
-
成员变量:
- 指向前一个节点的指针、指向后一个节点的指针
- 数据
- 回调函数
- 时间
-
-
sort_timer_lst:
-
成员函数:
- 构造函数、析构函数
- 添加节点、调整节点、删除节点、调整节点位置
-
成员变量:
- 头指针、尾指针
-
-
Utils:
这个类,其实严格来说不放到定时器类中的。他这个是吧一些要用的整合到一起了。
- 对文件描述符设置非阻塞
- 将内核事件表注册读事件,ET模式,选择开启EPOLLONESHOT
- 信号处理函数
- 设置信号函数
- 定时处理任务,重新定时以不断触发SIGALRM信号
四、下期预告
http类的编写与解析
五、最后
求赞!