一种定时器实现方法及装置转让专利

申请号 : CN201010180908.7

文献号 : CN101853047B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈卫亮

申请人 : 瑞斯康达科技发展股份有限公司

摘要 :

本发明提供了一种定时器实现方法和装置:创建对应有各定时时间的定时器超时桶,各定时器超时桶按定时时间由小到大的顺序依次链接成一链表;若一子定时器的定时周期与一定时器超时桶对应有的定时时间相匹配,则将该子定时器链接到该定时器超时桶中;当定时周期扫描器的扫描时间到达时,定时周期扫描器对定时时间与所述扫描时间相等的定时器超时桶所链接的子定时器进行超时处理。本发明所述的定时器实现方法和装置,是通过降低某些子定时器的定时准确度,从而避免了某个扫描时间内可能会出现多个子定时器同时执行超时处理的情况,也就降低了CPU的资源占用率,能够实现在降低CPU资源占用率的同时实现定时器的定时功能,并且设计复杂度低。

权利要求 :

1.一种定时器实现方法,应用于具有多个子定时器的定时器装置中,其特征在于,该方法包括以下步骤:创建对应有各定时时间的定时器超时桶,各定时器超时桶按定时时间由小到大的顺序依次链接成一链表,所述定时时间为定时周期扫描器的最小扫描时间的整数倍;

若一子定时器的定时周期与一定时器超时桶对应有的定时时间相匹配,则将该子定时器链接到该定时器超时桶中;

当定时周期扫描器的扫描时间到达时,定时周期扫描器对定时时间与所述扫描时间相等的定时器超时桶所链接的子定时器进行超时处理,其中,所述将该子定时器链接到该定时器超时桶中之后,进一步包括:

当所述子定时器未成功链接到定时器超时桶时,则

A、重新设置所述子定时器的定时周期,再将重新设置了定时周期的子定时器链接到与定时器超时桶的定时时间相匹配的定时器超时桶中,如此反复执行步骤A,直至所述子定时器成功链接到定时器超时桶中。

2.如权利要求1所述的方法,其特征在于,该方法进一步包括:按照各子定时器特点,将多个子定时器进行归类,并作为一个子定时器。

3.如权利要求2所述的方法,其特征在于,所述按照各子定时器特点,将多个子定时器进行归类包括:将每一个物理端口上功能类似、定时周期在误差允许的范围内作为相同的多个子定时器归为一类。

4.如权利要求1所述的方法,其特征在于,所述创建对应有各定时时间的定时器超时桶之后,该方法还包括:为所述创建的各定时器超时桶设置可链接的子定时器的数量,并对各定时器超时桶可链接的子定时器数量进行调节。

5.如权利要求1所述的方法,其特征在于,所述重新设置所述子定时器的定时周期包括:在误差允许的范围内,从集合有子定时器可允许配置的定时周期的数据池中选择一个数据作为为子定时器重新设置的定时周期。

6.一种定时器实现装置,其特征在于,该装置包括:创建模块、选择模块和超时处理模块,其中,所述创建模块,用于创建对应有各定时时间的定时器超时桶,各定时器超时桶按定时时间由小到大的顺序依次链接成一链表,所述定时时间为定时周期扫描器的最小扫描时间的整数倍;

所述选择模块,用于若一子定时器的定时周期与一定时器超时桶对应有的定时时间相匹配,则将该子定时器链接到该定时器超时桶中;

所述超时处理模块,用于当定时周期扫描器的扫描时间到达时,对定时时间与所述扫描时间相等的定时器超时桶所链接的子定时器进行超时处理,该装置还包括再选择单元,用于当所述子定时器未成功链接到定时器超时桶时,则A、重新设置所述子定时器的定时周期,再将重新设置了定时周期的子定时器链接到与定时器超时桶的定时时间相匹配的定时器超时桶中,如此反复执行步骤A,直至所述子定时器成功链接到定时器超时桶中。

7.如权利要求6所述的装置,其特征在于,该装置还包括分类模块,用于按照各子定时器特点,将多个子定时器进行归类,并作为一个子定时器。

8.如权利要求7所述的装置,其特征在于,所述分类模块,进一步用于按照各子定时器特点,将多个子定时器进行归类包括:将每一个物理端口上功能类似、定时周期在误差允许的范围内作为相同的多个子定时器归为一类。

9.如权利要求6所述的装置,其特征在于,该装置还包括数量设置模块,用于为所述创建的各定时器超时桶设置可链接的子定时器的数量,并对各定时器超时桶可链接的子定时器数量进行调节。

10.如权利要求6所述的装置,其特征在于,所述重新设置所述子定时器的定时周期包括:在误差允许的范围内,从集合有子定时器可允许配置的定时周期的数据池中选择一个数据作为为子定时器重新设置的定时周期。

说明书 :

一种定时器实现方法及装置

技术领域

[0001] 本发明涉及定时器设计技术领域,特别涉及一种定时器实现方法及装置。

背景技术

[0002] 目前,在嵌入式实时系统开发中,常用的定时器有轮询定时器和分类定时器两种,下面分别对这两种定时器进行简单介绍。
[0003] 图1给出了现有轮询定时器的设计示意图。如图1所示,在该轮询定时器中有一个定时周期扫描器和一个子定时器队列,其中,在定时周期扫描器中设置有扫描时间,子定时器队列中有依次排列的T1、T2、T3、T4等多个子定时器,且子定时器队列中的每一个子定时器与定时周期扫描器是同时启动的:当定时周期扫描器开始扫描时,所有的子定时器开始进行定时操作。在每个扫描时间到达时,定时周期扫描器都会对子定时器队列中的每个子定时器进行扫描,即,将扫描时间与子定时器的定时时间相比较,当两者相等时,则视为子定时器超时,该子定时器会执行相应的超时处理,如响铃等。如果该子定时器为可重置型定时器,则该子定时器会被重置到子定时器队列中;如果该子定时器为一次性定时器,则该子定时器会从子定时器队列中被删除。
[0004] 从上述分析可以看出,在轮询定时器中,当在某个扫描时间内有多个子定时器同时超时时,则这多个子定时器需要同时执行各自对应的超时处理,因此,在某个时刻会造成中央处理单元(CPU)资源的占用率非常高。然而,在实际应用中,系统中的CPU资源是有限的,当某个时刻所需的CPU资源超过了系统中有限的CPU资源时,整个系统会崩溃,从而导致轮询定时器定时功能失效,也就限制了轮询定时器的使用。
[0005] 图2为现有分类定时器的设计示意图。同现有轮询定时器一样,在分类定时器中,也有一个定时周期扫描器,但与轮询定时器不同的是,在分类定时器中有子定时器队列1、子定时器队列2、子定时器队列3等多个子定时器队列,这些不同的子定时器队列是将所有的子定时器依据一定的分类原则而得到的,分类原则不同,得到的子定时器队列也就不同,图2中给出的是按照定时周期的不同来对所有子定时器进行划分而得到的。在分类定时器中,定时周期扫描器的扫描过程基本上同轮询定时器,即,当定时周期扫描器开始扫描时,每个子定时器队列中的每个子定时器都开始进行定时操作,且在每个扫描时间到达时,定时周期扫描器都会对每个子定时器队列中的每个子定时器进行扫描。
[0006] 在采用分类定时器时,当在某个扫描时间内有多个子定时器同时超时时,也会出现多个子定时器需要同时执行各自的超时处理,而每个子定时器在执行超时处理时都会占用系统的CPU资源,由于系统中的CPU资源是有限的,当多个子定时器同时执行超时处理所需的CPU资源超过了系统中有限的CPU资源时,整个系统会出现崩溃的问题。
[0007] 目前,随着业务支撑系统性能差异及业务需求不同,在业务功能开发中,常常有多个不同的子定时器同时执行超时处理,而当多个子定时器同时执行超时处理时,采用现有的各种定时器都可能会出现CPU资源占用率过高而导致系统崩溃的问题,从而导致不能完成定时器的定时功能。

发明内容

[0008] 有鉴于此,本发明提供了一种定时器实现方法,能够在降低CPU资源占用率的情况下实现定时器的定时功能,而且设计复杂度较低。
[0009] 本发明还提供了一种定时器实现装置,能够在降低CPU资源占用率的情况下实现定时器的定时功能,而且设计复杂度较低。
[0010] 为了达到上述目的,本发明提出的技术方案为:
[0011] 一种定时器实现方法,应用于具有多个子定时器的定时器装置中,该方法包括以下步骤:
[0012] 创建对应有各定时时间的定时器超时桶,各定时器超时桶按定时时间由小到大的顺序依次链接成一链表,所述定时时间为定时周期扫描器的最小扫描时间的整数倍;
[0013] 若一子定时器的定时周期与一定时器超时桶对应有的定时时间相匹配,则将该子定时器链接到该定时器超时桶中;
[0014] 当定时周期扫描器的扫描时间到达时,定时周期扫描器对定时时间与所述扫描时间相等的定时器超时桶所链接的子定时器进行超时处理,
[0015] 其中,所述将该子定时器链接到该定时器超时桶中之后,进一步包括:
[0016] 当所述子定时器未成功链接到定时器超时桶时,则
[0017] A、重新设置所述子定时器的定时周期,再将重新设置了定时周期的子定时器链接到与定时器超时桶的定时时间相匹配的定时器超时桶中,如此反复执行步骤A,直至所述子定时器成功链接到定时器超时桶中。
[0018] 一种定时器实现装置,该装置包括:创建模块、选择模块和超时处理模块,其中,[0019] 所述创建模块,用于创建对应有各定时时间的定时器超时桶,各定时器超时桶按定时时间由小到大的顺序依次链接成一链表,所述定时时间为定时周期扫描器的最小扫描时间的整数倍;
[0020] 所述选择模块,用于若一子定时器的定时周期与一定时器超时桶对应有的定时时间相匹配,则将该子定时器链接到该定时器超时桶中;
[0021] 所述超时处理模块,用于当定时周期扫描器的扫描时间到达时,对定时时间与所述扫描时间相等的定时器超时桶所链接的子定时器进行超时处理,
[0022] 该装置还包括再选择单元,用于当所述子定时器未成功链接到定时器超时桶时,则
[0023] A、重新设置所述子定时器的定时周期,再将重新设置了定时周期的子定时器链接到与定时器超时桶的定时时间相匹配的定时器超时桶中,如此反复执行步骤A,直至所述子定时器成功链接到定时器超时桶中。
[0024] 综上所述,本发明所采用的定时器实现方法,通过降低某些子定时器的定时准确度,从而避免了某个扫描时间内可能会出现多个子定时器同时执行超时处理的情况,也就降低了CPU的资源占用率,从而能够实现在降低CPU资源占用率的同时实现定时器的定时功能,并且设计复杂度低。

附图说明

[0025] 图1为现有轮询定时器的设计示意图;
[0026] 图2为现有分类定时器的设计示意图;
[0027] 图3为本发明所采用的定时器实现装置的设计示意图;
[0028] 图4为本发明所采用的定时器实现方法的工作流程图;
[0029] 图5为本发明定时器实现装置的结构示意图。

具体实施方式

[0030] 为了解决现有技术中存在的问题,本发明提出了一种全新的定时器实现方法和装置,即通过降低某些子定时器的定时准确度,从而避免了某个扫描时间内可能会出现多个子定时器同时执行超时处理的情况,也就降低了CPU的资源占用率;此外,本发明还通过减少子定时器的个数来减少多个子定时器同时执行超时处理的可能,进一步地降低了CPU的资源占用率;最后,在本发明所采用的方法中,定时器超时桶是按照定时时间由小到大的顺序依次排列的,在某个扫描时间到达时,定时器周期扫描器仅需扫描定时时间与扫描时间相等的定时器超时桶中的子定时器即可,而无需在每个扫描时间到达时,定时周期扫描器对所有的子定时器都要进行扫描,从而也降低了设计复杂度。
[0031] 在介绍具体的方案之前,首先介绍一下定时器超时桶和数据池的概念。定时器超时桶是针对具有不同定时时间的子定时器而建立的数据结构,即,将具有相同定时周期的子定时器链接入一定时器超时桶;多个定时器超时桶可以相互链接形成链表,即定时器超时桶链表。在误差允许的范围内,链接于同一定时器超时桶的子定时器的定时周期是相等的,当定时时间为定时周期扫描器的扫描时间时,其链接的多个子定时器会执行各自的超时处理;数据池是一子定时器可允许配置的定时周期的集合,且数据池的个数是与所有定时器超时桶中的子定时器的个数一一对应的。
[0032] 基于上述介绍,本发明所述方案的具体实现包括:
[0033] 创建对应有各定时时间的定时器超时桶,各定时器超时桶按定时时间由小到大的顺序依次链接成一链表,所述定时时间为定时周期扫描器的最小扫描时间的整数倍;
[0034] 若一子定时器的定时周期与一定时器超时桶对应有的定时时间相匹配,则将该子定时器链接到该定时器超时桶中;
[0035] 当定时周期扫描器的扫描时间到达时,定时周期扫描器对定时时间与所述扫描时间相等的定时器超时桶所链接的子定时器进行超时处理。
[0036] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
[0037] 参见图3所述的定时器实现装置的设计示意图。如图3所示,该定时器装置包括定时周期扫描器和Bct1、Bct2、Bct3、Bct4和Bctx等多个定时器超时桶,其中,每个定时器超时桶的定时时间都为定时周期扫描器最小扫描时间的整数倍,且它们分别链接了不同定时周期的子定时器,所述链接的子定时器的定时周期与定时器超时桶的定时时间相匹配,定时周期扫描器在定时器超时桶的定时时间内对该定时器超时桶所链接的子定时器进行扫描,被扫描到的子定时器会执行相应的超时处理。图4给出了本发明所采用的定时器装置的具体实现流程,如图4所示,该流程主要包括如下步骤:
[0038] 步骤401:按照各子定时器特点,将多个子定时器进行归类,并将归类后的多个子定时器作为一个子定时器。
[0039] 在本步骤中,将多个子定时器归为一类是依据某一原则来进行的,在不同的应用环境中,依据的原则可能是不同的,比如,在数据通信交换机设备的开发中,通常是依据物理端口将子定时器进行归类,具体为:将每一个物理端口上功能类似、定时周期在误差允许的范围内作为相同的多个子定时器归为一类,将这一类子定时器作为一个子定时器来使用,从而得到了数量较少的子定时器。实际中,还可依据其他原则将多个不同的子定时器进行归类,以不影响本发明实施例的实现为准。
[0040] 需要说明的是,当子定时器个数很多时,多个子定时器同时进行超时处理的概率是很高的,因此,可能会出现某个时刻CPU资源占用率很高的问题,为了减小CPU资源的占用率,在本步骤中,将多个子定时器作为一个子定时器来使用。然而,在实际中,作为一个子定时器的多个子定时器的定时周期不可能是完全相同的,从而将多个子定时器作为一个子定时器来使用,也就导致了某些子定时器的定时准确度不高。
[0041] 步骤402:为归类后的每一个子定时器设置定时周期。
[0042] 在本步骤中,需要为归类后的每一个子定时器设置好定时周期,具体的实现方式为:为每个子定时器建立一个数据池,从集合有子定时器可允许配置的定时周期的数据池中随机选择一个数据作为子定时期的定时周期。
[0043] 步骤403:创建对应有各定时时间的定时器超时桶。
[0044] 在本步骤中,定时器超时桶可以采用动态方式或静态数组的方式来创建,且创建的定时器超时桶的定时时间是定时周期扫描器的最小扫描时间的整数倍,且各定时器超时桶按定时时间由小到大的顺序依次链接成一链表
[0045] 步骤404:为定时器超时桶设置可链接的子定时器的数量。
[0046] 一个定时器超时桶中的子定时器是需要同时执行超时处理的,而每个子定时器执行超时处理都是需要占用CPU资源的,为了使得某个时刻CPU资源占用率不能超过系统中的CPU资源,也就需要限制定时器超时桶中的子定器个数,即每个定时器超时桶可链接的子定时期的数量是有上限的。
[0047] 需要说明的是,步骤403和404的操作与步骤401和402的操作是可并行进行的。
[0048] 步骤405:将定时周期与定时器超时桶的定时时间相匹配的子定时器链接到该定时器超时桶中。
[0049] 在本步骤中,当定时周期扫描器的扫描时间到达时,定时周期扫描器对定时时间与所述扫描时间相等的定时器超时桶所链接的子定时器进行超时处理。
[0050] 步骤406:判断子定时器是否成功链接到相匹配的定时器超时桶中,如果是,则结束整个工作流程;否则,执行步骤407。
[0051] 步骤407:在误差允许的范围内为子定时器重新设置定时周期,返回至步骤405。
[0052] 需要说明的是,当所述子定时器未成功链接到定时器超时桶时,则[0053] A、重新设置所述子定时器的定时周期,再将重新设置了定时周期的子定时器链接到与定时器超时桶的定时时间相匹配的定时器超时桶中,如此反复执行步骤A,直至所述子定时器成功链接到定时器超时桶中。
[0054] 还需要说明的是,定时器超时桶链接的子定时器的数量是有上限的,当将某个与定时器超时桶的定时时间相匹配的子定时器链接到定时器超时桶中时,发送定时器超时桶中链接的子定时器个数已经达到了定时器超时桶的上限,应为该子定时器重新选择定时器超时桶。当重新选择的定时器超时桶中的子定时器个数也达到了该定时器超时桶的上限时,还可以为该子定时器进行第三次、第四次的选择定时器超时桶等。但是,在实际应用中,如果第二次选择定时器超时桶时发现定时器超时桶中子定时器的个数已经达到了上限,即可为认为该子定时器没有与之相匹配的定时器超时桶。
[0055] 同时,定时器超时桶的上限是可以来调节的,当CPU资源占用率过大时,可适当地调低定时器超时桶的上限;反之,则可适当地调高定时器超时桶的上限,让一个定时器超时桶可链接更多数量的子定时器,具体可在步骤404中进行。
[0056] 同步骤402一样,在本步骤中,所述重新设置所述子定时器的定时周期也可以为:在误差允许的范围内,从数据池中选择一个数据作为为子定时器重新设置的定时周期。其它为子定时器重新设置定时周期的方式也是可以的,实际中以不影响本发明实施例的实现为准。
[0057] 至此,即完成了本发明所采用的定时器实现装置的整个工作流程。图4给出的是一种最佳的实施方式,实际中,不影响本发明实施例的各种实施方式都是可以的。
[0058] 图5给出了图3所采用的定时器实现装置的结构示意图。从图5中可以看出,该定时器实现装置主要包括:归类模块51、创建模块52、选择模块53、超时处理模块54、数量设置模块55以及再选择模块56,其中,
[0059] 所述归类模块51,用于按照各子定时器特点,将多个子定时器进行归类,并作为一个子定时器。
[0060] 在本实施例中,所述归类模块51可以将每一个物理端口上功能类似、定时周期在误差允许的范围内作为相同的多个子定时器归为一类。
[0061] 创建模块52,用于为归类模块51归类后得到的所有子定时器创建对应有各定时时间的定时器超时桶,各定时器超时桶按定时时间由小到大的顺序依次链接成一链表,所述定时时间为定时周期扫描器的最小扫描时间的整数倍。
[0062] 选择模块53,用于若一子定时器的定时周期与创建模块52所创建的一定时器超时桶对应有的定时时间相匹配,则将该子定时器链接到该定时器超时桶中。
[0063] 超时处理模块54,用于当定时周期扫描器的扫描时间到达时,对定时时间与所述扫描时间相等的定时器超时桶所链接的子定时器进行超时处理。
[0064] 数量设置模块55,用于为所述创建模块52创建的各定时器超时桶设置可链接的子定时器的数量,并对各定时器超时桶可链接的子定时器数量进行调节。
[0065] 再选择模块56,用于当选择模块53没有将所述子定时器成功链接到定时器超时桶时,则
[0066] A、重新设置所述子定时器的定时周期,再将重新设置了定时周期的子定时器链接到与定时器超时桶的定时时间相匹配的定时器超时桶中,如此反复执行步骤A,直至所述子定时器成功链接到定时器超时桶中。
[0067] 其中,所述重新设置所述子定时器的定时周期包括:在误差允许的范围内,从集合有子定时器可允许配置的定时周期的数据池中选择一个数据作为为子定时器重新设置的定时周期。
[0068] 至此,即得到了本发明所采用的定时器实现装置。本实施例的具体工作流程参见图4,此处不再赘述。
[0069] 下面以图3所设计的定时器实现装置来说明该定时器实现装置的具体工作过程:
[0070] 首先,当定时周期扫描器的扫描时间到达Bct1的定时时间时,定时周期扫描器对Bct1中所链接的各个子定时器进行扫描,且在各个子定时器被扫描到时,都会执行各自的超时处理,从而完成该子定时器的定时功能;
[0071] 其次,当定时周期扫描器的扫描时间到达Bct2的定时时间时,定时周期扫描器对Bct2中所链接的各个子定时器进行扫描,同样地,Bct2中所链接的各个子定时器也会分别执行各自的超时处理,依次类推,直至定时周期扫描器扫描完最后一个定时器超时桶所链接的所有子定时器;
[0072] 最后,定时器周期扫描器被复位清零,且与所有的可重置型子定时器再同时进行启动,并重新执行对Bct1中所链接的各个子定时器的扫描。
[0073] 需要说明的是,同现有技术一样,当某个子定时器完成自己的超时处理后,且该子定时器为可重置型定时器,则该子定时器依旧被链接在所对应的定时器超时桶中,否则,该子定时器会从相应的定时器超时桶中被删除。
[0074] 总之,本发明所采用的定时器实现方法和装置,是通过降低某些子定时器的定时准确度,从而避免了某个扫描时间内可能会出现多个子定时器同时执行超时处理的情况,也就降低了CPU的资源占用率;此外,本发明还通过减少子定时器的个数来减少多个子定时器同时执行超时处理的可能,进一步地降低了CPU的资源占用率;最后,在本发明所采用的方法中,定时器超时桶是按照定时时间由小到大的顺序依次排列的,在某个扫描时间到达时,定时器周期扫描器仅需扫描定时时间与扫描时间相等的定时器超时桶中的子定时器即可,而无需在每个扫描时间到达时,定时周期扫描器对所有的子定时器都要进行扫描,从而也降低了设计复杂度。
[0075] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。