一种定时器实现方法技术

技术编号:2844516 阅读:237 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及计算机领域,本发明专利技术公开了一种定时器的实现方法,在本发明专利技术方法中,预先定义有新定时器,初始化所述新定时器执行的任务,并在所述新定时器的注册表中,注册有所述任务的事件、所述事件的定时周期、以及所述事件对应的回调函数信息,所述方法包括:所述新定时器获取由所述原有定时器定时释放的信号量;所述信号量触发所述新定时器,所述新定时器在预设在本定时器中的注册表中,查询是否有超时事件,如果有,则调用所述事件对应的回调函数。本发明专利技术方法减少了原有定时器的负载,防止原有定时器被过于频繁调用,而导致定时精度过低的问题。

【技术实现步骤摘要】

本专利技术涉及计算机领域,特别的涉及一种定时器的实现方法。
技术介绍
定时器是软件开发中一种常见且必须的技术,定时器是一系列函数的集合体,通过使用其提供的方法能够使软件在固定的时间内完成指定的功能。其目的在于使软件在固定的时间内自动执行某种操作或任务。通常的,高精度的定时器借用硬件定时器提供中断的方式实现的,这也是软件系统精度最高的基准定时器。一般情况下,为了完成“固定时间内自动执行某种操作”的功能(比如定时器收发数据包功能),都采用直接使用软件系统原有定时器。但是,如果任务较多时,使用系统原有定时器过于频繁,将导致该原有定时器的定时精度大大下降,从而影响定时功能的正常使用。
技术实现思路
本专利技术要解决的技术问题是提供,避免原有定时器被频繁调用而导致定时精度下降。为解决上述技术问题,本专利技术的目的是通过以下技术方案实现的一种定时器的实现方法,预先定义有新定时器,初始化所述新定时器执行的任务,并在所述新定时器的注册表中,注册有所述任务的事件、所述事件的定时周期、以及所述事件对应的回调函数信息,所述方法包括所述新定时器获取由所述原有定时器定时释放的信号量;所述信号量触发所述新定时器,所述新定时器在预设在本定时器中的注册表中,查询是否有超时事件,如果有,则调用所述事件对应的回调函数。由以上技术方案可以看出,本专利技术通过令原有定时器定时释放信号量,由该定时信号量,触发激活该新定义的定时器,该新定时器被激活后,在预设在新定时器中的注册表中,查询是否有超时事件,如果有,则调用所述事件对应的回调函数,新定时器分担了一部分原该使用或调用原有定时器而执行的任务,减少了原有定时器的被调用时间,防止原有定时器被调用过于频繁而导致定时精度过低的问题。由于在本专利技术中,新定时器与原有定时器之间只有释放用于激活新定时器的信号量的关系,新定时器与原有定时器之间逻辑上互相隔离,因此有利于保证原有定时器的正常工作。附图说明图1为本专利技术方法流程示意图。具体实施例方式本专利技术的目的在于解决现有技术中,原有定时器被频繁调用而导致该原有定时器定时精度下降的问题,本专利技术的核心思想是,预先定义有新定时器,初始化所述新定时器执行的任务,并在所述新定时器的注册表中,注册有所述任务的事件、所述事件的定时周期、以及所述事件对应的回调函数信息,所述方法包括所述新定时器获取由所述原有定时器定时释放的信号量;所述信号量触发所述新定时器,所述新定时器在预设在本定时器中的注册表中,查询是否有超时事件,如果有,则调用所述事件对应的回调函数。为了使本领域的技术人员更好的理解本
技术实现思路
,以下结合附图以及具体实施例对本
技术实现思路
作进一步说明如图1所示为本专利技术方法的流程示意图,如图示,本方法包括以下步骤步骤101在原有定时器A的基础上,预先定义新定时器B,初始化所述新定时器执行的任务,并在所述新定时器的注册表中,注册有所述任务的事件、所述事件的定时周期、以及所述事件对应的回调函数信息。在原有定时器A中注册一定时函数TimeBOut(),该函数TimeBOut()用来定时地向新定时器B,释放信号量sim_timerBwork,该信号量sim_timerBwork为一可以触发新定时器B启动的信号,一般的,为了实现方便起见,我们选用方波二进制信号量。该定时函数TimeBOut()的定时时长,具体根据所需要生成的新定时器B的定时精度要求设置,比如,如果新定时器B的定时精度要求为10毫秒,则将该定时函数TimeBOut()的定时时长设置为10毫秒。一般的,为了便于实现,我们一般将该定时函数TimerBOut()的定时时长设置为原有定时器A的最小定时单位,或者,不大于新定时器B定时精度要求的,原有定时器A的最小定时单位的自然数倍。为新定时器B建立一死循环任务001,来实现该新定时器B所需要执行的任务,该死循环任务001具体如以下步骤103至步骤108所示。初始化新定时器B需执行的任务。一般的,为了保证原有定时器A任务正常执行,令新定时器B的执行任务的优先级低于原有定时器A的执行任务的优先级。如果原有定时器A是任务实现的,则在启动新定时器B的任务时,设置较低的优先级来实现。这样不但保证了高优先级任务的执行,而且,保证无论新定时器B被调用或使用多少数,甚至崩溃,都不会影响到原有定时器的精度,以及其注册定时器任务的使用。因此本优先级设置,更加有利于保证原有定时器的正常工作。新定时器任务由任务的事件构成,在确定了新定时器的任务后,将该任务对应的时间,加入到新定时器B的注册表,新定时器B工作过程中,将通过查询注册表中的事件表项是否超时,如果超时,回调该事件响应的回电函数来实现。在新定时器B的注册表中,每事件表项至少包括以下几个域本事件的前项事件、本事件的后项事件、本事件对应的回调函数参数指针、本事件对应的回调函数指针、当前时刻记录、以及定时周期。对注册表的操作,必须通过注册表操作信号量来执行,注册表操作信号量为一标示是否允许对注册表作相应操作的参数或信号。对注册表的任何操作,如输入、删除、查询等都必须根据注册表操作信号量进行,如果当前注册表操作信号量不允许相应注册表操作,则相应操作无效。一般的,在任务实现的定时器中,该注册表操作信号量的取值或状态,有预定的规则设置。比如,如果注册表操作规则规定对注册表的任何操作不允许同时进行,那么,当前正在输入或删除注册表项时,注册表的查询操作被禁止,注册表操作信号量不能被获取到。步骤102原有定时器A向新定时器B,定时释放信号量。原有定时器A中预定义好的定时函数TimerBOut(),使得原有定时器A定时向新定时器B,释放信号量sim_timerBwork,触发新定时器B正常工作。步骤103新定时器B获取定时器A的信号量,如果获取到,则执行步骤104,否则继续执行尝试本步骤,直到获取到为止。新定时器B获取由原有定时器A发出的信号量sim_timerBwork,在信号量sim_timerBwork触发启动。步骤104新定时器B获取注册表操作信号量,如果获取到,则执行步骤105;否则,返回步骤103。新定时器获取注册表操作信号量,如果能够获取到,则执行步骤105;否则,返回步骤103,继续等待获取由原有定时器定时A释放的信号量sim_timerBtwork。步骤105判断查询是否遍历注册表的所有事件表项,如果是,则执行步骤106;否则,执行步骤107。步骤106释放注册表操作信号量。当查询操作遍历注册表的所有事件表项后,查询结束,释放表操作信号量,以让其他对该注册表的表操作可以进行。步骤107查询定时器B的注册表,查询注册表内是否有超时的事件项,如果有,则执行步骤108;否则,返回步骤103。按照定时器B的注册表中的事件顺序,将当前新定时器B的计时时间与各事件表项所注册的周期相比较,如果新定时器B的计时时间为所述事件的定时周期的自然数倍,则判定为超时,执行步骤106;否则不超时,返回步骤103。该超时的判断具体如下 假设原有定时器A向新定时器B释放信号量的定时周期为5ms,那么,新定时器B的定时精度为5ms,新定时器B注册表执行的任务的某事件A的定时周期为1s,那么,当新定时器B启动后,开始计时,当计时到1s(即到第200个定时周期)时,比较当前新定时器B的计时本文档来自技高网
...

【技术保护点】
一种定时器的实现方法,其特征是,预先定义有新定时器,初始化所述新定时器执行的任务,并在所述新定时器的注册表中,注册有所述任务的事件、所述事件的定时周期、以及所述事件对应的回调函数信息,所述方法包括:    所述新定时器获取由所述原有定时器定时释放的信号量;    所述信号量触发所述新定时器,所述新定时器在预设在本定时器中的注册表中,查询是否有超时事件,如果有,则调用所述事件对应的回调函数。

【技术特征摘要】
1.一种定时器的实现方法,其特征是,预先定义有新定时器,初始化所述新定时器执行的任务,并在所述新定时器的注册表中,注册有所述任务的事件、所述事件的定时周期、以及所述事件对应的回调函数信息,所述方法包括所述新定时器获取由所述原有定时器定时释放的信号量;所述信号量触发所述新定时器,所述新定时器在预设在本定时器中的注册表中,查询是否有超时事件,如果有,则调用所述事件对应的回调函数。2.根据权利要求1所述的定时器实现方法,其特征是,在所述初始化所述新定时器执行的任务步骤中,进一步包括设置所述新定时器执行的任务的优先级,使所述优先级低于所述原有定时器执行的任务的优先级。3.根据权利要求1或2所述的定时器的实现方法,其特征是,所述原有定时器定时释放信号量的周期,具体根据所述新定时器的计时精度要求确定。4.根据权利要求3所述的定时器的实现方法,其特征是,所述原有定时器定时释放信号量的周期为所述原有定时器的最小定时单位。5.根据权利要求1或2所述的定时器的实现方法,其特征是,所述信号量为二进制信号量。6.根据权利要求1或2所述的定时器的实现方法,其特征是,在预定义所述新定时器后,进一步包括初始化所述注册表的表操作信号量;所述新定时器在预设在本定时器中的注册表中,查询是否有超时事件,具体包括获取注册表操作信号量;所述新定时器在预设在本定时器中的注册表中,查询是否有超时事件,并且,在查询完毕后,释放所述注册表操作信号量。7.根据权利要求6所述的定时器的...

【专利技术属性】
技术研发人员:汤剑
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1