9 DelayQueueEntry 延时队列节点类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类。
本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso/
DelayQueueEntry 延时队列节点类
entry的意思如下
entry n.进入,入场; 入口处,门口; 登记,记录; 参加比赛的人;
为什么说是节点类呢?这个通过阅读代码就可以知道了。
DelayQueueEntry类含有四个数据成员,其中fNext和fPrev说明了其是一个链表的节点。fToken是节点的标识,DelayInterval fDeltaTimeRemaining成员是一个代表时间间隔的量,在后面任务调度器调度任务的时候会使用到。
9_DelayQueueEntry.png

还有一个静态的成员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;
}
9 DelayQueueEntry 延时队列节点类——Live555源码阅读(一)基本组件类的更多相关文章
- 12 哈希表相关类——Live555源码阅读(一)基本组件类
12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...
- 10 DelayQueue 延时队列类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 www.cnblogs.com/oloroso/ 本文由乌合 ...
- 8 延时队列相关类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 2 DelayInterval延时间隔类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 这里是时间相关类的第二个部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnb ...
- 11 AlarmHandler定时处理类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 13 HashTable抽象哈希表类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 7 HandlerSet 处理程序链表类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso Handler ...
- 6 HandlerDescriptor 处理程序描述类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 5 HandlerIterator处理程序迭代器类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso Handler ...
随机推荐
- 安卓、swiper标准的文字滚动
溢出滚动基本原理还是relative,absolute. 核心高度 swiper-wrapper 和gun-swiper-slide 的自适应高度成为关键 <style> .gun-s ...
- Bitcask 存储模型
Bitcask 存储模型 Bitcask 是一个日志型.基于hash表结构的key-value存储模型,以Bitcask为存储模型的K-V系统有 Riak和 beansdb新版本. 日志型数据存储 何 ...
- OC-self关键字
self关键字 1. 成员变量和局部变量同名 当成员变量和局部变量同名时,采取就近原则,访问的是局部变量 用self访问成员变量,区分同名的局部变量 2.使用细节 1) 出现的地方:所有的OC ...
- MySQL主从数据库同步延迟问题解决(转)
最近在做MySQL主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些讲解,记录下来以便自己学习: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务 ...
- Java Programming Test Question 2
public class JPTQuestion2 { public static void main(String[] args) { String s3 = "JournalDev&qu ...
- svn 切出指定版本、更改版本名称、删除分支
1,切出指定版本 svn copy svn://192.168.1.52/help/branches/help_forShop_140307 -r 170 svn://192.168.1.52/hel ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
- javascript位运算
javascript作为一门高级语言,他尽量让开发人员减少思考底层的硬件工作原理,而将精力集中在逻辑开发的层面.不过,不论这门语言多么高级,我们必须知道数据依然以bits的形式存储,有时候我们会直接与 ...
- 也谈Promise
最新的ES6标准添加有Promise方法,但自己在项目中一直使用jQuery(jQuery自己实现了不标准的Promise),加上es6标准还没有得到普及,也就懒得学习相关资料. 最近手头上的活少了, ...
- 【AngularJS】—— 9 自定义过滤器
AngularJS另一个特点就是提供了过滤器,可以通过操作UNIX下管道的方式,操作数据结果. 通过使用管道,可以便于双向的数据绑定中视图的展现. 过滤器在处理过程中,将数据变成新的格式,而且可以使用 ...