这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类。

本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso/

DelayQueueEntry 延时队列节点类

entry的意思如下

entry n.进入,入场; 入口处,门口; 登记,记录; 参加比赛的人;

为什么说是节点类呢?这个通过阅读代码就可以知道了。

DelayQueueEntry类含有四个数据成员,其中fNextfPrev说明了其是一个链表的节点。fToken是节点的标识,DelayInterval fDeltaTimeRemaining成员是一个代表时间间隔的量,在后面任务调度器调度任务的时候会使用到。

9_DelayQueueEntry.png

还有一个静态的成员static intptr_t tokenCounter用来作为token标识的不重复的初始化;注意,静态成员不是对象的成员,而是类的成员。(所有的对象共享这一个)

这里可以看到,其构造函数是protected权限的,而析构函数是public权限的。且没有了别的构造相关方法,也就是说这个类对象只能由其派生类来创建,但是销毁是对外开放的。其派生类有两个AlarmHandlerDelayQueue

///// 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_tintptr_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源码阅读(一)基本组件类的更多相关文章

  1. 12 哈希表相关类——Live555源码阅读(一)基本组件类

    12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...

  2. 10 DelayQueue 延时队列类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 www.cnblogs.com/oloroso/ 本文由乌合 ...

  3. 8 延时队列相关类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

  4. 2 DelayInterval延时间隔类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 这里是时间相关类的第二个部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnb ...

  5. 11 AlarmHandler定时处理类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

  6. 13 HashTable抽象哈希表类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

  7. 7 HandlerSet 处理程序链表类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso Handler ...

  8. 6 HandlerDescriptor 处理程序描述类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

  9. 5 HandlerIterator处理程序迭代器类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso Handler ...

随机推荐

  1. JavaWeb学习笔记——DAO设计模式

  2. MONO加载DLL调试命令

    http://www.mono-project.com/docs/advanced/pinvoke/dllnotfoundexception/ http://www.mono-project.com/ ...

  3. java中的各个数据结构区别

    ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢 ...

  4. CentOS下nginx简单安装

    说明:环境 系统:Centos 6 软件包:nginx-1.2.4 配置系统yum源 #/etc/yum.repos.d/ #rm -rf ./* vi localhost.repos.d [yumy ...

  5. Sqlserver2008 表分区教程

    先声明..Sql2008只有企业版才能够搞这个表分区.其他版本请自觉更改.. 哥在这里费了很长时间劲..结果还是老老实实的重装.. 表分区定义 一般情况下,我们建立数据库表时,表数据都存放在一个文件里 ...

  6. APACHE POI教程 --java应用程序用POI与Excel交互

    POI报表 --用POI与Excel交互 AURISOFT 第一章 POI简介 --Jakata Poi HSSF:纯java的Excel解决方案 在我们实际的开发中,表现层的解决方案虽然有多样,但是 ...

  7. 如何解决winows启动后出现grub?

    village :村庄, 村民 villa: 别墅 setting: 设置; ** 环境, 背景, 布置, 布局, 底座 what's the setting of the villa like? h ...

  8. R语言画图实例-参考R语言实战

    dose <- c(, , , ,) drugA <- c(, , , , ) drugB <- c(, , , , ) # 数据准备 opar <- par(no.reado ...

  9. CFgym Board Queries (旋转、翻转简化)

    http://codeforces.com/gym/100497 codeforces 2014-2015 CT S02E04: Codeforces Trainings Season 2 Episo ...

  10. 30秒搭建Github Page

    如果中国每个程序员都写博客,那么中国IT届的春天就来了 原文转自我的前端博客,链接:http://www.hacke2.cn/create-github-page/ 有同学问我的网站是怎么创建的,其实 ...