9 DelayQueueEntry 延时队列节点类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类。
本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso/
DelayQueueEntry 延时队列节点类#
entry的意思如下
entry n.进入,入场; 入口处,门口; 登记,记录; 参加比赛的人;
为什么说是节点类呢?这个通过阅读代码就可以知道了。
DelayQueueEntry
类含有四个数据成员,其中fNext
和fPrev
说明了其是一个链表的节点。fToken
是节点的标识,DelayInterval fDeltaTimeRemaining
成员是一个代表时间间隔的量,在后面任务调度器调度任务的时候会使用到。
还有一个静态的成员static intptr_t tokenCounter
用来作为token
标识的不重复的初始化;注意,静态成员不是对象的成员,而是类的成员。(所有的对象共享这一个)
这里可以看到,其构造函数是protected权限
的,而析构函数是public权限
的。且没有了别的构造相关方法,也就是说这个类对象只能由其派生类来创建,但是销毁是对外开放的。其派生类有两个AlarmHandler
和DelayQueue
。
///// DelayQueueEntry ///// // 延时队列记录(节点) entry n.进入,入场; 入口处,门口; 登记,记录; 参加比赛的人; class DelayQueueEntry { public: virtual ~DelayQueueEntry(); intptr_t token() { return fToken; } protected: // abstract base class DelayQueueEntry(DelayInterval delay); // delete this; virtual void handleTimeout(); private: friend class DelayQueue; DelayQueueEntry* fNext; //下一个节点 DelayQueueEntry* fPrev; //上一个节点 DelayInterval fDeltaTimeRemaining; //延时剩余的时间 intptr_t fToken; //标识,等指针宽度的int型 static intptr_t tokenCounter; //标识计数(注意此处是static 变量) };
DelayQueueEntry的构造#
DelayQueueEntry
的构造是很简单的,其只有一个参数,就是延时间隔时间
。这里的构造与前面说的HandlerDescriptor略有不同,因为它没有把自身加入到链表中,而是把fNext和fPrev都指向this
。
这里要说的就是fToken的初始化赋值,是根据静态成员tockenCounter
自增来的。这里便保证了在一个指针表示的范围内,fToken是不会重复的。这里说一下为什么fToken
的类型是intptr_t
。intptr_t
是一个等指针宽度的int
型。我们知道指针是用来寻址的,指针的宽度代表了最大的寻址空间。32位的指针能够寻址的范围是4G大小。这里DelayQueueEntry
对象的大小显然不是1Byte
,就是把内存占满的情况下,fToken也不会重复
。(不可能让它占满)
DelayQueueEntry::DelayQueueEntry(DelayInterval delay) : fDeltaTimeRemaining(delay) { fNext = fPrev = this; fToken = ++tokenCounter; }
handleTimeout方法#
这个方法异常简单,就是销毁自身。这里要说的是它的方法名,意思很简单,处理超时。顺便说一下,DelayQueueEntry的析构是空函数,什么也没有做。
void DelayQueueEntry::handleTimeout() { delete this; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理