会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 家用器具 / 定时器 / 一种软件定时器的优化方法及系统

一种软件定时器的优化方法及系统

阅读:82发布:2021-02-24

IPRDB可以提供一种软件定时器的优化方法及系统专利检索,专利查询,专利分析的服务。并且本发明提供一种软件定时器的优化方法,包括:创建第一和第二定时器数组;定义总运行时间T1和每个时刻所有定时器实例对象超时处理所需时间T2,初始化T1和所述T2为零;等待时间片后,总运行时间T1加1,记录T1’;根据链表索引号将定时器实例对象添加至第一定时器数组的链表数组元素,检测定时器实例对象的超时,记录超时时间T3,生成索引时刻;根据索引时刻将与其对应的定时器实例对象添加至第二定时器数组的链表数组元素;在第二定时器数组中循环执行超时回调处理函数,之后删除该定时器实例对象,直至执行完毕所有定时器实例对象。本发明提高定时器实例对象的操作效率,极大的减少CPU的占用率,对定时器进行时间漂移补偿,提高定时器的定时准确度。,下面是一种软件定时器的优化方法及系统专利的具体信息内容。

1.一种软件定时器的优化方法,应用于若干个需要使用定时器的业务模块中,每一个业务模块包括多个定时器实例对象,其特征在于,包括:步骤一,为每一个需要使用定时器的业务模块生成定时器链表索引号,创建包括与所述业务模块数量一致的链表数组元素的第一定时器数组;定义总运行时间,记录为T1和每个时刻所有定时器实例对象超时处理所需时间,记录为T2,初始化所述T1和所述T2为零;

所述定时器实例对象包括定时器超时回调处理函数;

步骤二,等待一时间片后,所述总运行时间T1自动加1,记录第一总运行时间T1’;

步骤三,开启所述业务模块中的定时器实例对象,根据所述定时器链表索引号将所述业务模块包括的多个定时器实例对象添加至所述第一定时器数组的链表数组元素中;

步骤四,创建第二定时器数组,在所述第二定时器数组检测所述定时器实例对象的超时,记录该定时器实例对象的超时时间T3,生成由该定时器实例对象的超时时间T3与第一总运行时间T1’之和组成的索引时刻;

步骤五,根据所述索引时刻将与所述索引时刻相对应的定时器实例对象添加至所述第二定时器数组的链表数组元素中;

步骤六,在所述第二定时器数组中循环执行所述链表数组元素下的定时器实例对象的超时回调处理函数,执行完后删除该定时器实例对象,继续执行该定时器实例对象下的其他定时器实例对象,直至执行完毕该链表数组元素下所有定时器实例对象,继续下一次循环。

2.根据权利要求1所述的软件定时器的优化方法,其特征在于:所述软件定时器的优化方法还包括:判断所述索引时刻是否小于等于第一总运行时间T1’与所有定时器实例对象超时处理所需时间T2之和,若是,则执行下一步骤,若否,则记录第二总运行时间T1”;

判断所述第二定时器数组的链表数组元素中是否存在定时器实例对象,若是,则执行下一步骤,若否,则返回步骤二,重新运行所述软件定时器的优化方法;

若所述链表数组元素中存在定时器实例对象,则在所述第二定时器数组中循环执行所述链表数组元素的定时器实例对象的定时器超时回调处理函数,之后删除该定时器实例对象。

3.根据权利要求2所述的软件定时器的优化方法,其特征在于:所述软件定时器的优化方法还包括:判断该定时器实例对象下是否还存在其他定时器实例对象,若是,则执行超时回调处理函数的步骤,若否,则记录第二总运行时间T1”;

判断第二总运行时间T1”与记录第一总运行时间T1’之差是否大于所述时间片,若否,则表示为所有定时器实例对象超时处理所需时间T2赋值为零,若是,则表示为所有定时器实例对象超时处理所需时间T2赋值为为T1”-T1’,继续下一次循环。

4.根据权利要求1所述的软件定时器的优化方法,其特征在于:所述定时器实例对象还包括记录存在于所述第一定时器数组中链表数组元素的节点的第一节点指针、记录存在于所述第二定时器数组中链表数组元素的节点的第二节点指针、及定时器超时回调处理参数。

5.根据权利要求4所述的软件定时器的优化方法,其特征在于:所述定时器实例对象中的第一节点指针记录所述第一定时器数组中所述链表数组元素的首地址。所述定时器实例对象中的第二节点指针记录所述第二定时器数组中链表数组元素的首地址。

6.根据权利要求5所述的软件定时器的优化方法,其特征在于:所述步骤六还包括根据所述定时器实例对象中的第一节点指针在所述第一定时器数组中删除所述定时器实例对象。

7.根据权利要求1所述的软件定时器的优化方法,其特征在于:所述第一定时器数组为定时器管理链表数组,所述第二定时器数组为定时器超时检测处理链表数组。

8.一种软件定时器的优化系统,应用于若干个需要使用定时器的业务模块中,每一个业务模块包括多个定时器实例对象,其特征在于,包括:第一创建模块,用于为每一个需要使用定时器的业务模块生成定时器链表索引号,创建包括与所述业务模块数量一致的链表数组元素的第一定时器数组;定义总运行时间,记录为T1和每个时刻所有定时器实例对象超时处理所需时间,记录为T2,初始化所述T1和和所述T2为零;所述定时器实例对象包括定时器超时回调处理函数;且所述第一创建模块还用于等待一时间片后,为所述总运行时间T1自动加1,记录第一总运行时间T1’;

管理模块,用于开启所述业务模块中的定时器实例对象,根据所述定时器链表索引号将所述业务模块包括的多个定时器实例对象添加至所述第一定时器数组的链表数组元素中;

第二创建模块,用于创建第二定时器数组,在所述第二定时器数组检测所述定时器实例对象的超时,记录该定时器实例对象的超时时间T3,生成由该定时器实例对象的超时时间T3与第一总运行时间T1’之和组成的索引时刻;

所述管理模块还用于根据所述索引时刻将与所述索引时刻相对应的定时器实例对象添加至所述第二定时器数组的链表数组元素中;

处理模块,用于在所述第二定时器数组中循环执行所述链表数组元素下的定时器实例对象的超时回调处理函数,执行完后删除该定时器实例对象,继续执行该定时器实例对象下的其他定时器实例对象,直至执行完毕该链表数组元素下所有定时器实例对象。

9.根据权利要求8所述的软件定时器的优化系统,其特征在于:所述软件定时器的优化系统还包括:第一判断模块和第二判断模块;

其中,所述第一判断模块用于判断所述索引时刻是否小于等于第一总运行时间T1’与所有定时器实例对象超时处理所需时间T2之和,若是,则调用所述第二判断模块,若否,则调用所述第二创建模块记录第二总运行时间T1”;

所述第二判断模块用于判断所述第二定时器数组的链表数组元素中是否存在定时器实例对象,若是,调用所述处理模块,若否,则重新运行所述软件定时器的优化系统;

所述处理模块用于若所述链表数组元素中存在其他定时器实例对象,则在所述第二定时器数组中循环执行所述链表数组元素的定时器实例对象的定时器超时回调处理函数,之后删除该定时器实例对象。

10.根据权利要求8所述的软件定时器的优化系统,其特征在于:所述软件定时器的优化系统还包括:第三判断模块和第四判断模块;

其中,所述第三判断模块用于判断该定时器实例对象下是否还存在其他定时器实例对象,若是,则继续调用所述处理模块,执行超时回调处理函数的步骤,若否,则调用所述第二创建模块记录第二总运行时间T1”;

所述第四判断模块用于判断第二总运行时间T1”与记录第一总运行时间T1’之差是否大于所述时间片,若否,则表示为所有定时器实例对象超时处理所需时间T2赋值为零,若是,则表示为所有定时器实例对象超时处理所需时间T2赋值为T1”-T1’,继续下一次循环。

说明书全文

一种软件定时器的优化方法及系统

技术领域

[0001] 本发明计算机通信技术领域,涉及一种优化方法及系统,特别是涉及一种软件定时器的优化方法及系统。

背景技术

[0002] 嵌入式多任务系统软件设计中经常会用到定时器,分为硬件定时器和软件定时器。硬件定时器通过中断方式实现,时间准确度高,但使用限制较多,如超时处理函数有阻塞,定时器较多时多中断对系统性能有影响。而传统的软件定时器通过一个软件定时器链表去管理定时器实例对象的所有操作,包括定时器实例对象的创建,启动,超时检测及处理,停止及删除。每次超时判断都会去循环遍历扫描链表中所有的定时器实例对象是否有超时,将超时的所有定时器进行相应回调处理,若果定时器实例对象应用较多,成百上千时,会占用很大的cpu资源,对定时器的管理效率低,且同一时刻超时的定时器会较多,执行这些超时定时器的回调处理耗时总合也会较多,由于这部分耗时未计算在软件定时器计时中,长期累积将会造成软件定时器时间偏移,定时不准确的问题。
[0003] 由于在软件开发中经常需要用到定时器,特别是在通信系统的设计中,有大量的定时要求。如在机架式EPON系统设计中,统计模块需要针对每个监控点启动定时器去定时采集数据,监控点可能上百个。在组播等协议模块中,收发包都需要用到定时器:发送消息以后有时候需要对方在约定的时间内收到对方的回应,如果在规定的时间内收不到回应,需要进行适当的处理,或者重发消息,或者进入出错处理。这些都对定时时间都较高要求。
[0004] 对于通用的定时器管理方法来说,以下操作都是必须的:
[0005] 1)创建定时器,creatTimer(interval,*app_callback)。设置一个定时器实例,其中interval表示定时器的指定时长,*app_callback表示定时器超时的回调处理函数。函数返回一个可用的定时器标识ID(timer ID);
[0006] 2)启动定时器,startTimer(timer ID)。启动一个定时器实例,其中timerID为定时器的唯一标识;
[0007] 3)停止定时器,stopTimer(timer ID)。停止一个定时器实例,其中timerID为定时器的唯一标识;
[0008] 4)删除定时器,destroyTimer(timerID)。在定时器超时前,根据已知的timerID查找到定时器实例对象,并将其删除;
[0009] 5)超时检查和处理。将定时器的时长划分为若干个时间相等的时间片,在每个时间片内检查所管理的定时器实例是否有超时,如果有,则触发超时处理。检测定时器的超时,并进行超时回调处理。
[0010] 现有技术采用一个链表timerList来管理定时器实例对象的所有操作。给定超时时间t1,t2,t3及相应的超时回调处理函数,创建定时器实例索引timer1,timer2,timer3,请参阅图1,显示为现有技术中定时器实例索引存储示意图。设置相应的剩余超时时间(timeout_interval)为t1,t2,t3。启动定时器时将定时器实例对象timer1,timer2,timer3按启动顺序添加到定时器管理链表timerList中。停止定时器实例对象及删除定时器实例对象时从定时器管理链表timerList开头扫描找到要处理的定时器实例对象进行相应处理。
[0011] 现有定时器实例对象的超时检测和处理过程如下:
[0012] 初始化创建一个定时器处理任务,该任务执行一个死循环:先定时等待一个时间片(timerTick)(一般用类taskDelay的系统调用),接下来将timerList链表头指针的第一个定时器实例索引timer1的剩余时间timeout_interval减去时间片timerTick,然后判断timeout_interval是否大于0。如果不大于0则说明这个定时器超时,执行相应的超时回调处理函数,并将这个定时器实例索引从链表中删除。因为可能有多个定时器同时超时,因此第一个定时器实例索引处理完以后,还需要继续扫描该定时器实例索引的下一个定时器实例索引,执行同样的操作,直到遍历到链表结尾为止。
[0013] 针对现有计数定时方案,对定时器的开启,停止及删除等操作处理以及定时器超时检测处理都是通过扫描整个定时器链表完成的,当定时器实例对象较多时,比较消耗CPU资源。更严重的问题是在定时器处理任务中,每次时间片timerTick到时时,就必须去扫描所有的定时器实例对象,而时间片到时间隔一般会很小(1个tick或1s),这样将会很占用CPU资源,对系统的整体性能和稳定性带来的弊端。而且当同一时刻超时的定时器过多,执行定时器的处理回调函数比较耗时时,耗时累积比较大,由于定时器未考虑这部分耗时,会造成定时器时间偏移,定时不准,会对一些协议模块等对时间要求较高的模块造成影响,严重时会影响这些模块的正常功能等。

发明内容

[0014] 鉴于以上所述现有技术的缺点,本发明的目的在于提供一种软件定时器的优化方法及系统,用于解决现有技术中定时器实例对象过多时对定时器的管理效率低,大量占用CPU资源,且定时器超时回调处理过程中的时间偏移导致定时时间不准确的问题。
[0015] 为实现上述目的及其他相关目的,本发明一方面提供一种软件定时器的优化方法,应用于若干个需要使用定时器的业务模块中,每一个业务模块包括多个定时器实例对象,包括:步骤一,为每一个需要使用定时器的业务模块生成定时器链表索引号,创建包括与所述业务模块数量一致的链表数组元素的第一定时器数组;定义总运行时间,记录为T1和每个时刻所有定时器实例对象超时处理所需时间,记录为T2,初始化所述T1和所述T2为零;所述定时器实例对象包括定时器超时回调处理函数;步骤二,等待一时间片后,所述总运行时间T1自动加1,记录第一总运行时间T1’;步骤三,开启所述业务模块中的定时器实例对象,根据所述定时器链表索引号将所述业务模块包括的多个定时器实例对象添加至所述第一定时器数组的链表数组元素中;步骤四,创建第二定时器数组,在所述第二定时器数组检测所述定时器实例对象的超时,记录该定时器实例对象的超时时间T3,生成由该定时器实例对象的超时时间T3与第一总运行时间T1’之和组成的索引时刻;步骤五,根据所述索引时刻将与所述索引时刻相对应的定时器实例对象添加至所述第二定时器数组的链表数组元素中;步骤六,在所述第二定时器数组中循环执行所述链表数组元素下的定时器实例对象的超时回调处理函数,执行完后删除该定时器实例对象,继续执行该定时器实例对象下的其他定时器实例对象,直至执行完毕该链表数组元素下所有定时器实例对象,继续下一次循环。
[0016] 优选地,所述软件定时器的优化方法还包括:判断所述索引时刻是否小于等于第一总运行时间T1’与所有定时器实例对象超时处理所需时间T2之和,若是,则执行下一步骤,若否,则记录第二总运行时间T1”;判断所述第二定时器数组的链表数组元素中是否存在定时器实例对象,若是,则执行下一步骤,若否,则返回步骤二,重新运行所述软件定时器的优化方法;若所述链表数组元素中存在定时器实例对象,则在所述第二定时器数组中循环执行所述链表数组元素的定时器实例对象的定时器超时回调处理函数,之后删除该定时器实例对象。
[0017] 优选地,所述软件定时器的优化方法还包括:判断该定时器实例对象下是否还存在其他定时器实例对象,若是,则执行超时回调处理函数的步骤,若否,则记录第二总运行时间T1”;判断第二总运行时间T1”与记录第一总运行时间T1’之差是否大于所述时间片,若否,则表示为所有定时器实例对象超时处理所需时间T2赋值为零,若是,则表示为所有定时器实例对象超时处理所需时间T2赋值为为T1”-T1’,继续下一次循环。
[0018] 优选地,所述定时器实例对象还包括记录存在于所述第一定时器数组中链表数组元素的节点的第一节点指针、记录存在于所述第二定时器数组中链表数组元素的节点的第二节点指针、及定时器超时回调处理参数。
[0019] 优选地,所述定时器实例对象中的第一节点指针记录所述第一定时器数组中所述链表数组元素的首地址。所述定时器实例对象中的第二节点指针记录所述第二定时器数组中链表数组元素的首地址。
[0020] 优选地,所述步骤六还包括根据所述定时器实例对象中的第一节点指针在所述第一定时器数组中删除所述定时器实例对象。
[0021] 优选地,所述第一定时器数组为定时器管理链表数组,所述第二定时器数组为定时器超时检测处理链表数组。
[0022] 本发明另一方面还提供一种软件定时器的优化系统,应用于若干个需要使用定时器的业务模块中,每一个业务模块包括多个定时器实例对象,包括:第一创建模块,用于为每一个需要使用定时器的业务模块生成定时器链表索引号,创建包括与所述业务模块数量一致的链表数组元素的第一定时器数组;定义总运行时间,记录为T1和每个时刻所有定时器实例对象超时处理所需时间,记录为T2,初始化所述T1和和所述T2为零;所述定时器实例对象包括定时器超时回调处理函数;且所述第一创建模块还用于等待一时间片后,为所述总运行时间T1自动加1,记录第一总运行时间T1’;管理模块,用于开启所述业务模块中的定时器实例对象,根据所述定时器链表索引号将所述业务模块包括的多个定时器实例对象添加至所述第一定时器数组的链表数组元素中;第二创建模块,用于创建第二定时器数组,在所述第二定时器数组检测所述定时器实例对象的超时,记录该定时器实例对象的超时时间T3,生成由该定时器实例对象的超时时间T3与第一总运行时间T1’之和组成的索引时刻;所述管理模块还用于根据所述索引时刻将与所述索引时刻相对应的定时器实例对象添加至所述第二定时器数组的链表数组元素中;处理模块,用于在所述第二定时器数组中循环执行所述链表数组元素下的定时器实例对象的超时回调处理函数,执行完后删除该定时器实例对象,继续执行该定时器实例对象下的其他定时器实例对象,直至执行完毕该链表数组元素下所有定时器实例对象。
[0023] 优选地,所述软件定时器的优化系统还包括:第一判断模块和第二判断模块;其中,所述第一判断模块用于判断所述索引时刻是否小于等于第一总运行时间T1’与所有定时器实例对象超时处理所需时间T2之和,若是,则调用所述第二判断模块,若否,则调用所述第二创建模块记录第二总运行时间T1”;所述第二判断模块用于判断所述第二定时器数组的链表数组元素中是否存在定时器实例对象,若是,调用所述处理模块,若否,则重新运行所述软件定时器的优化系统;所述处理模块用于若所述链表数组元素中存在其他定时器实例对象,则在所述第二定时器数组中循环执行所述链表数组元素的定时器实例对象的定时器超时回调处理函数,之后删除该定时器实例对象。
[0024] 优选地,所述软件定时器的优化系统还包括:第三判断模块和第四判断模块;其中,所述第三判断模块用于判断该定时器实例对象下是否还存在其他定时器实例对象,若是,则继续调用所述处理模块,执行超时回调处理函数的步骤,若否,则调用所述第二创建模块记录第二总运行时间T1”;所述第四判断模块用于判断第二总运行时间T1”与记录第一总运行时间T1’之差是否大于所述时间片,若否,则表示为所有定时器实例对象超时处理所需时间T2赋值为零,若是,则表示为所有定时器实例对象超时处理所需时间T2赋值为T1”-T1’,继续下一次循环。
[0025] 如上所述,本发明的软件定时器的优化方法及系统,具有以下有益效果:
[0026] 第一,本发明所述的软件定时器的优化方法及系统由于此设计按照模块划分定时器实例对象,提高了定时器实例对象的操作效率。对定时器按照超时时间添加到定时器超时检测处理数组中,每个时刻只会去访问处理当前时刻已超时的定时器实例对象,不需访问所有定时器实例对象,极大的减少的CPU的占用率。
[0027] 第二,同时本发明所述的软件定时器的优化方法及系统对定时器对象的超时回调处理进行了耗时计算,对定时器进行了时间漂移补偿,提高了定时器的定时准确度。

附图说明

[0028] 图1显示为现有技术中定时器实例索引存储示意图示意图。
[0029] 图2显示为本发明的软件定时器的优化方法的流程图。
[0030] 图3显示为本发明的具体实施方式第一定时器数组中定时器实例对象存储示意图。
[0031] 图4显示为本发明的具体实施方式第二定时器数组中定时器实例对象存储示意图。
[0032] 图5显示为本发明的软件定时器的优化系统的原理结构图。
[0033] 元件标号说明
[0034] 1 软件定时器的优化系统
[0035] 11 第一创建模块
[0036] 12 管理模块
[0037] 13 第二创建模块
[0038] 14 处理模块
[0039] 15 第一判断模块
[0040] 16 第二判断模块
[0041] 17 第三判断模块
[0042] 18 第四判断模块
[0043] 19 赋值模块
[0044] S1~S14 步骤

具体实施方式

[0045] 以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
[0046] 需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0047] 本发明提供一种软件定时器的优化方法及系统,所述软件定时器的优化方法及系统的发明原理为:
[0048] 本发明专利设计采用两个数组来处理定时器。定时器管理链表数组A[]和定时器超时检测处理链表B[]。系统启动后运行的总运行时刻gTimerJiffies(每次等待的时间片timerTick(可设置为1tick或1s)的累加总和)。每个时刻所有定时器实例对象超时处理需要的耗时时间gAlignmentTime。
[0049] 使用数组A[]进行定时器的创建,开启,停止及删除等操作管理处理。数组A[]为一个较小数组,可根据业务模块数设置数组个数,为每个需要使用定时器的业务模块生成一个定时器链表索引号,该定时器链表索引号可索引数组A[]中的链表数组元素,将一业务模块中的多个定时器实例对象以生成的定时器链表索引号添加到数组A[]中的链表数组元素中。由于将所有的定时器实例对象是按业务模块进行了划分,对定时器实例对象的操作不需要遍历所有的定时器实例对象,最坏情况下只需遍历本模块的定时器实例对象,业务模块较多时提高了定时器实例对象的操作效率。
[0050] 使用数组B[]进行定时器的超时检测和超时回调处理,数组B[]为一个大数组,每个链表数组元素为一个链表,链表的索引使用系统运行的时刻进行索引,每个链表数组元素存放的都是当前时刻应该执行的定时器。
[0051] 在开启定时器实例对象的时候,以业务模块为索引Modindex将定时器实例对象添加到数组A[ModIndex]中,以定时器实例对象的超时时间timeout_interval加上当前时刻gTimerJiffies的值为索引timeInedx,添加到B[timeInedx]的链表数组元素中。
[0052] 初始化总运行时刻gTimerJiffies为0,每个时刻所有定时器实例对象超时处理需要的耗时时间gAlignmentTime为0,定时器任务执行一个死循环,死循环每等待一个时间片timerTick后对总运行时刻gTimerJiffies加1,接着从gTimerJiffies到gTimerJiffies+gAlignmentTime为索引依次执行这些时刻超时的定时器回调处理函数,全部执行完以后gTimerJiffies设置为gTimerJiffies+gAlignmentTime,对定时器进行补偿。计数这些定时器所有的执行的耗时时间,耗时时间大于timerTick时设置gAlignmentTime。接着执行下一次死循环。系统每个时刻只去访问处理当前时刻已超时的定时器实例对象,不需访问所有定时器对象,极大的减少的CPU的占用率,同时对定时器对象的超时回调处理进行了耗时计算,对定时器进行了时间漂移补偿,提高了定时器的定时准确度。
[0053] 实施例一
[0054] 本实施例提供一种软件定时器的优化方法,应用于若干个需要使用定时器的业务模块中,每一个业务模块包括多个定时器实例对象,请参阅图2,显示为软件定时器的软化方法的流程图,所述软件定时器的优化方法包括:
[0055] S1,为每一个需要使用定时器的业务模块生成定时器链表索引号,创建包括与所述业务模块数量一致的链表数组元素的第一定时器数组A[];定义总运行时间,记录为T1,即gTimerJiffies,和每个时刻所有定时器实例对象超时处理所需时间,记录为T2,即gAlignmentTime,初始化所述T1(gTimerJiffies)和所述T2(gAlignmentTime)为零。所述定时器实例对象包括记录存在于所述第一定时器数组中链表数组元素的节点的第一节点指针、记录存在于所述第二定时器数组中链表数组元素的节点的第二节点指针、定时器超时回调处理函数、及定时器超时回调处理参数。所述定时器实例对象中的第一节点指针记录所述第一定时器数组中所述链表数组元素的首地址。所述定时器实例对象中的第二节点指针记录所述第二定时器数组中链表数组元素的首地址。
[0056] S2,等待一时间片timerTick(在本实施例中,所述时间片timerTick可设置为1tick或1s)后,所述总运行时间T1(gTimerJiffies)自动加1,记录第一总运行时间T1’(gTimerJiffies)。
[0057] S3,开启所述业务模块中的定时器实例对象,根据所述定时器链表索引号将所述业务模块包括的多个定时器实例对象添加至所述第一定时器数组A[]的链表数组元素中。
[0058] S4,创建第二定时器数组B[],在所述第二定时器数组检测所述定时器实例对象的超时,记录该定时器实例对象的超时时间T3,生成由该定时器实例对象的超时时间T3与第一总运行时间T1’之和组成的索引时刻。在本实施例中,所述第一定时器数组为定时器管理链表数组,所述第二定时器数组为定时器超时检测处理链表数组。例如,在总运行时间gTimerJiffies为1,2,3,4,5,6个等待的时间片timerTick的时刻分别开启了业务模块1的定时器a、b,业务模块2的定时器c,业务模块3的定时器d、e、f,六个定时器实例对象的超时时间T3(timeout_interval)分别为3,1,1,4,2,1个timerTick,则六个定时器实例对象在第二定时器数组B[]中的索引时刻[gTimerJiffies+timeout_interval]分别为4,3,4,8,7,7,此时具体实施方式第一定时器数组A[]和第二定时器数组B[]中定时器实例对象存储示意图如图3和图4。
[0059] S5,根据所述索引时刻将与所述索引时刻相对应的定时器实例对象添加至所述第二定时器数组B[]的链表数组元素中。
[0060] S6,判断所述索引时刻是否小于等于第一总运行时间T1’(gTimerJiffies)与所有定时器实例对象超时处理所需时间T2(gAlignmentTime)之和,若是,则执行步骤S7,若否,执行步骤S10,即记录第二总运行时间T1”。
[0061] S7,判断所述第二定时器数组的链表数组元素中是否存在定时器实例对象,若是,则执行步骤S8,若否,则返回步骤S2,重新运行所述软件定时器的优化方法。
[0062] S8,若所述链表数组元素中存在定时器实例对象,则在所述第二定时器数组中循环执行所述链表数组元素的定时器实例对象的定时器超时回调处理函数,之后根据所述定时器实例对象中的第二节点指针在所述第二定时器数组中删除该定时器实例对象,同时本步骤还包括根据所述定时器实例对象中的第一节点指针在所述第一定时器数组中删除所述定时器实例对象。
[0063] S9,判断该定时器实例对象下是否还存在其他定时器实例对象,在本实施例中,所述其他定时器实例对象是指执行完超时回调处理函数后定时器实例对象下的另一定时器实例对象,若是,则执行超时回调处理函数的步骤,及返回步骤S8,若否,则执行步骤S10,即记录第二总运行时间T1”。
[0064] S11,判断第二总运行时间T1”与记录第一总运行时间T1’之差是否大于所述时间片timerTick,第二总运行时间T1”与记录第一总运行时间T1’之差为计数所有定时器实例对象的执行的耗时时间,若否,则执行步骤S12,及将所有定时器实例对象超时处理所需时间T2赋值为零,若是,则执行步骤S13,即将所有定时器实例对象超时处理所需时间T2赋值为T1”-T1’。在本实施例中,每个时刻只需访问处理当前时刻已超时的定时器实例对象,不需要方法所有的定时器实例对象,极大地减少了CPU的占用率,同时对定时器实例对象的超时回调处理进行了耗时计算,对定时器实例对象进行了时间偏移补偿,提高了定时器的定时时间的准确度。
[0065] S14,继续下一次循环,令总运行时间T1为零的所有定时器实例对象超时处理所需时间T2或为T1”-T1’的所有定时器实例对象超时处理所需时间T2以对定时器进行补偿。
[0066] 本实施例所提供的软件定时器的优化方法由于此设计按照模块划分定时器实例对象,提高了定时器实例对象的操作效率。对定时器按照超时时间添加到定时器超时检测处理数组中,每个时刻只会去访问处理当前时刻已超时的定时器实例对象,不需访问所有定时器实例对象,极大的减少的CPU的占用率,同时对定时器对象的超时回调处理进行了耗时计算,对定时器进行了时间漂移补偿,提高了定时器的定时准确度。
[0067] 实施例二
[0068] 本实施例提供一种软件定时器的优化系统1,应用于若干个需要使用定时器的业务模块中,每一个业务模块包括多个定时器实例对象,请参阅图5,显示为软件定时器的优化系统的原理结构图,所述软件定时器的优化系统包括:第一创建模块11、管理模块12、第二创建模块13、处理模块14、第一判断模块15、第二判断模块16、第三判断模块17、第四判断模块18、及赋值模块19。
[0069] 所述第一创建模块11用于为每一个需要使用定时器的业务模块生成定时器链表索引号,创建包括与所述业务模块数量一致的链表数组元素的第一定时器数组A[];定义总运行时间,记录为T1和每个时刻所有定时器实例对象超时处理所需时间,记录为T2,初始化所述T1和和所述T2为零;所述定时器实例对象包括定时器超时回调处理函数;且所述第一创建模块还用于等待一时间片后,为所述总运行时间T1自动加1,记录第一总运行时间T1’。所述定时器实例对象包括记录存在于所述第一定时器数组中链表数组元素的节点的第一节点指针、记录存在于所述第二定时器数组中链表数组元素的节点的第二节点指针、定时器超时回调处理函数、及定时器超时回调处理参数。所述定时器实例对象中的第一节点指针记录所述第一定时器数组中所述链表数组元素的首地址。所述定时器实例对象中的第二节点指针记录所述第二定时器数组中链表数组元素的首地址。
[0070] 与所述第一创建模块11连接的所述管理模块12用于开启所述业务模块中的定时器实例对象,根据所述定时器链表索引号将所述业务模块包括的多个定时器实例对象添加至所述第一定时器数组的链表数组元素中。
[0071] 与所述管理模块12连接第二创建模块13用于创建第二定时器数组,在所述第二定时器数组检测所述定时器实例对象的超时,记录该定时器实例对象的超时时间T3,生成由该定时器实例对象的超时时间T3与第一总运行时间T1’之和组成的索引时刻。
[0072] 当所述第二定时器数组创建后,所述管理模块12还用于根据所述索引时刻将与所述索引时刻相对应的定时器实例对象添加至所述第二定时器数组的链表数组元素中。
[0073] 分别与所述管理模块12和所述第二创建模块13连接的处理模块14用于在所述第二定时器数组中循环执行所述链表数组元素下的定时器实例对象的超时回调处理函数,执行完后根据所述定时器实例对象中的第二节点指针在所述第二定时器数组中删除该定时器实例对象,继续执行该定时器实例对象下的另一定时器实例对象,直至执行完毕该链表数组元素下所有定时器实例对象。在本实施例中,所述处理模块14同时还用于根据所述定时器实例对象中的第一节点指针在所述第一定时器数组中删除所述定时器实例对象。
[0074] 与所述处理模块14连接的第一判断模块15用于判断所述索引时刻是否小于等于第一总运行时间T1’与所有定时器实例对象超时处理所需时间T2之和,若是,则调用所述第二判断模块16,若否,则调用所述第二创建模块13记录第二总运行时间T1”;
[0075] 与所述第一判断模块15连接的所述第二判断模块16用于判断所述第二定时器数组的链表数组元素中是否存在定时器实例对象,若是,调用所述处理模块14,若否,则重新运行所述软件定时器的优化系统1。所述处理模块14用于若所述链表数组元素中存在定时器实例对象,则在所述第二定时器数组中循环执行所述链表数组元素的定时器实例对象的定时器超时回调处理函数,之后根据第二节点指针删除定时器实例对象,同时根据第一节点指针在第一定时器数组中删除定时器实例对象。
[0076] 与所述第二判断模块16连接的所述第三判断模块17用于判断该定时器实例对象下是否还存在其他定时器实例对象,在本实施例中,所述其他定时器实例对象是指执行完超时回调处理函数后定时器实例对象下的另一定时器实例对象,若是,则继续调用所述处理模块14,执行超时回调处理函数的步骤,之后根据第二节点指针删除其他定时器实例对象,同时根据第一节点指针在第一定时器数组中删除其他定时器实例对象,若否,则调用所述第二创建模块13记录第二总运行时间T1”。
[0077] 与所述第三判断模块17连接的所述第四判断模块18用于判断第二总运行时间T1”与记录第一总运行时间T1’之差是否大于所述时间片timerTick,若否,则调用所述赋值模块19,将所有定时器实例对象超时处理所需时间T2赋值为零,若是,也将调用所述赋值模块19,为所有定时器实例对象超时处理所需时间T2赋值为T1”-T1’。最后,所述当所有定时器实例对象超时处理所需时间T2赋值为零或为T1”-T1’时,所述赋值模块令总运行时间T1为零的所有定时器实例对象超时处理所需时间T2或为T1”-T1’的所有定时器实例对象超时处理所需时间T2以对定时器进行补偿。
[0078] 本发明所述的软件定时器的优化方法及系统由于此设计按照模块划分定时器实例对象,提高了定时器实例对象的操作效率。对定时器按照超时时间添加到定时器超时检测处理数组中,每个时刻只会去访问处理当前时刻已超时的定时器实例对象,不需访问所有定时器实例对象,极大的减少的CPU的占用率,同时对定时器对象的超时回调处理进行了耗时计算,对定时器进行了时间漂移补偿,提高了定时器的定时准确度。
[0079] 所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
[0080] 上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用