[发明专利]一种多线程环境下定时器的设置方法无效
申请号: | 201110282740.5 | 申请日: | 2011-09-20 |
公开(公告)号: | CN103019805A | 公开(公告)日: | 2013-04-03 |
发明(设计)人: | 田之进;梁平;宁学军 | 申请(专利权)人: | 佳都新太科技股份有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 510665 广*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 多线程 环境 定时器 设置 方法 | ||
1.一种基于多线程环境下的定时器的设置方法,其特征在于,在传统的采用一个双向链表(称为“链表1”),按超时时间顺序管理所有定时器单元的基础上,还增加了一个按照定时器唯一标识进行索引的索引数据结构,以及另外一个双向链表用来按时间顺序把在不同时间段触发的第一个定时器单元连接起来,此链表称为“链表2”;
所述索引数据结构,用于:当清除一个未触发的定时器时,需要首先根据定时器的唯一标识查找到这个定时器单元,利用这个索引数据结构可以快速查找到需要清除的定时器单元,查找时间由原来的单纯链表的组织方式的O(n)的时间效率提高到0(logen);
所述链表2,用于:当增加新定时器单元时,可以通过遍历链表2更加快速定位到新定时器单元的插入位置,从而提高增加新定时器单元的时间效率。
2.根据权利要求1所述的索引数据结构,其特征在于,包括:
索引数据结构可以采用整数哈希函数的方式组织,也可以采用常用的编程语言中已经定义的map函数库。
3.一种基于多线程环境下的定时器的设置方法,其特征在于,包括:
定时器循环执行线程定时取到前述传统增量定时器链表的第一个定时器单元,将其超时时长减去timerTick时间值;如果新的超时时长大于0,则表示此定时器单元尚未超时,不需要进行任何操作;如果新的超时时长小于等于0,则表示此定时器单元已经超时,需要触发超时操作,步骤如下:
1)执行定时器单元中指定的操作函数或发送指定的消息;
2)将这个定时器单元从前述链表1中删除;
3)将这个定时器单元从前述链表2中删除;
4)从索引结构中删除当前定时器单元;
5)继续遍历链表1中的后继元素,如果其超时时长大于0,则停止遍历;如果其超时时长为0,则执行定时器单元中指定的操作函数或发送指定的消息;
6)继续步骤5)。
4.一种基于多线程环境下的定时器的设置方法,其特征在于,包括:
当清除一个未触发的定时器时,从索引结构中根据timerID查找到要删除的定时器单元,执行如下操作:
1)如果此定时器在链表1中存在后继单元,则将此后继单元的超时时长值增加要清除的定时器单元的超时时长值;
2)从链表1中删除此定时器单元;
3)如果此定时器存在于链表2中,则:将其从链表2中删除;如果步骤1)调整后的后继单元的超时时长值不为0,还需要将此后继单元加入链表2中要删除的定时器单元的位置;
4)从索引结构中删除当前定时器单元。
5.一种基于多线程环境下的定时器的设置方法,其特征在于,包括:
当设置一个新的定时器单元时,执行如下操作:
1)向前述索引结构中增加新的定时器单元;
2)遍历前述链表2,将其中的每个定时器单元的超时时长与新定时器要求的超时时长进行比较,如果新定时器的超时时长恰好等于其中某一个元素的超时时长,则找到前述链表2中当前元素在链表1中的位置,将新的定时器单元插入到其后;
3)如果新定时器的超时时长落在两个相邻的链表2的元素的中间位置(即大于当前元素的超时时长但小于后继元素的超时时长),则将新定时器元素插入链表2当前元素的后面,并在链表1中的适当位置增加新定时器单元,其插入位置为链表2后继元素在链表1中对应位置的前面;插入完成后还需要调整链表2后继元素的超时时长。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于佳都新太科技股份有限公司,未经佳都新太科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110282740.5/1.html,转载请声明来源钻瓜专利网。