CN101141514A - 提高定时器精度的方法 - Google Patents
提高定时器精度的方法 Download PDFInfo
- Publication number
- CN101141514A CN101141514A CNA2007101639120A CN200710163912A CN101141514A CN 101141514 A CN101141514 A CN 101141514A CN A2007101639120 A CNA2007101639120 A CN A2007101639120A CN 200710163912 A CN200710163912 A CN 200710163912A CN 101141514 A CN101141514 A CN 101141514A
- Authority
- CN
- China
- Prior art keywords
- timer
- time
- reference point
- count cycle
- dormancy
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Measurement Of Predetermined Time Intervals (AREA)
Abstract
本发明涉及一种提高定时器精度的方法,所述方法包括以下步骤:对比定时器计时参考点与相应的系统时间参考点;根据对比定时器计时参考点与相应的系统时间参考点所获差值,休眠补偿休眠时长且调整下一定时器计时周期休眠时长。利用本发明的提高定时器精度方法,能够避免实际定时器计时周期与理论定时器计时周期之间存在的误差随着循环次数增加而逐渐累积的问题,提高定时器计时精度。
Description
技术领域
本发明涉及计算机或通讯领域内的定时器管理,特别是涉及一种提高定时器精度的方法。
背景技术
计算机或通讯技术领域内,很多应用场合都需要用到定时器来完成自动控制、定时状态切换或延时处理等功能。定时器的精度是影响这些应用效果的重要因素之一,尤其是在通讯领域用户呼叫过程中,必须通过用户账户上的余额设置用户可以呼叫的总时长,以避免用户呼叫过程出现账户透支或者提前中断用户呼叫等现象。一般,呼叫时长的控制方法就是通过计算用户可以呼叫的总时长来设置相应的定时器,如果用户呼叫的总时长超出了定时器设置的时长,则用户呼叫将被强行中断。基于此,定时器的精度显然会直接影响到用户和通讯运营商的实际利益,如果控制不好,甚至可能导致一些法律上的纠纷。
现有技术中,如图1所示,定时器一般由一个条件循环来实现,每一次循环过程称为一个定时器计时周期,定时器计时周期包括定时器操作时长和休眠时长。其中,所述定时器操作时长内完成相关定时器操作,例如对计时参数加一或减一操作、用户余额查询操作、定时提醒操作等;所述休眠时长为补偿定时器操作时长与理论定时器计时周期的差值而设置的时间段,定时器持续所述循环操作,直至计时参数到达某个预定值,或从某个预定值减至0后定时器计时完毕,执行定时器到达操作。
如果理论定时器计时周期与实际定时器计时周期存在偏差,例如由于定时器操作时长随实际操作的具体情况而发生变化等,则会由于定时器计时周期的循环累积而使所存在的偏差逐渐放大。对此问题,现有技术中采用的一种解决办法为:在每个定时器计时周期首先获取系统时间点t1,然后在完成定时器操作后,获取系统时间点t2,将t2减去t1即为实际定时器操作的时间长度,简称为操作时长,将理论定时器计时周期Tc减去操作时长,得到定时器执行休眠操作的时间长度为Tc-(t2-t1),简称为休眠时长,定时器休眠该休眠时长后,进入下一个定时器计时周期。
现有解决方法中,由于获取时间点t1和t2的系统调用都需要消耗一定的时间,且一般的休眠操作的精度大概也只有10毫秒左右,故实际所得到的定时器计时周期也不是真正等于理论定时器计时周期,二者之间的误差也会随着循环次数的增加而逐渐增大,如果循环次数很大,则定时器的累积误差也会很大,由此定时器的精度难以保证。
发明内容
有鉴于此,本发明的主要目的在于提供一种提高定时器精度的方法,解决现有技术中实际定时器计时周期与理论定时器计时周期之间存在的误差会随着循环次数增加而逐渐累积的问题。
为达到上述目的,本发明的技术方案是这样实现的:
一种提高定时器精度的方法,所述方法包括以下步骤:A、对比定时器计时参考点与相应的系统时间参考点;B、根据对比定时器计时参考点与相应的系统时间参考点所获得的差值,休眠补偿休眠时长,且调整下一定时器计时周期内的休眠时长。
其中,步骤A中所述对比为:在每个定时器计时周期内执行所述对比操作;或间隔至少一个定时器计时周期执行所述对比操作。
本发明的提高定时器精度的方法步骤B中,所述调整定时器计时周期为:如果定时器计时参考点早于相应的系统时间参考点的时长超过预定阈值,则定时器休眠补偿休眠时长,且增大下一个定时器计时周期内的休眠时长,如果定时器参考点晚于相应的系统时间参考点,则减小下一个定时器计时周期内的休眠时长。
其中,所述增大或减小下一个定时器计时周期内的休眠时长的幅度为预定阈值长度。
或者,所述增大下一个定时器计时周期的休眠时长的幅度为:对定时器计时参考点早于相应的系统时间参考点的时间段除以预定阈值的商取整,以取整后的值乘以预定阈值长度作为增大幅度;
减小下一个定时器计时周期内的休眠时长的幅度为:对定时器计时参考点晚于相应的系统时间参考点的时间段除以预定阈值的商取整,以取整后加一的值乘以预定阈值长度作为减小幅度。
本发明提高定时器精度的方法在步骤A之前,进一步包括步骤:执行休眠操作。
其中,所述预定阈值为定时器计时周期长度的十分之一。
本发明提出的提高定时器精度的方法,具有以下优点:由于本发明间隔一定定时器计时周期,对比定时器计时参考点与相应的系统时间参考点,以此调整定时器计时周期,实际上定时器不断根据系统时间调整执行补偿休眠操作和调整休眠时长,因此始终保证与系统时间同步,能够避免实际定时器计时周期与理论定时器计时周期之间存在的误差随着循环次数增加而逐渐累积的问题,提高定时器计时精度。
附图说明
图1为现有技术中定时器工作流程图;
图2为本发明提高定时器精度方法中定时器计时周期的示意图;
图3为本发明提高定时器精度方法的流程图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明的核心思想是:间隔一定定时器计时周期,对比定时器计时参考点与相应的系统时间参考点,以此调整定时器计时周期。由此,可避免实际定时器计时周期与理论定时器计时周期之间存在的误差随着循环次数增加而逐渐累积的问题。
如图2所示,在时间轴上,理论定时器计时周期标识为Tc,每一个定时器计时周期内休眠时长为Tb,操作时长为Tr,Tr随着实际情况会有所改变,由此,会带来休眠时长Tb与操作时长Tr之和(Tb+Tr)与Tc之间的差值,记为Tc-(Tb+Tr)。其中,所述Tb、Tc在定时器开始运行之前都已经给定,此时给定的Tb称为Tb的初始值。
如图3所示,本发明的提高定时器精度的方法,包括以下步骤:
步骤101:进入某个定时器计时周期后,先执行休眠操作。
在进入某个定时器计时周期后,例如第n个定时器计时周期,先完成所述休眠操作,其持续时间长度即休眠时长Tb由初始值所限定,或由第n-1个定时器计时周期所修改限定,所述修改限定方式同后续步骤104中的描述,根据本周期内定时器计时参考点早于系统时间参考点的时长是否超过预定阈值,或定时器计时参考点是否晚于系统时间参考点,来调整下一周期内的休眠时长。在该定时器计时周期内先执行休眠操作,是为了提高定时器精度,因为在定时器计时周期内先执行休眠操作,将定时器操作置于定时器计时周期的后期,能够尽量保证定时器操作结束时刻离系统时间上结束的时刻最近,也最容易被用户所接受,所以本实施例中将休眠操作置于定时器计时周期的前期完成。但是,将休眠操作置于定时器计时周期中的其他时间段来完成,对本发明的实施也不会产生其他影响作用。
步骤102:执行定时器操作,操作结束后,比较定时器操作结束时间点与系统时间参考点。
这里,所述系统时间参考点为理论上当前定时器计时周期结束时所对应的系统时间点,例如当前处于第n个定时器计时周期,定时器开始工作时的时间点为t0,则所述系统时间参考点tn=t0+n×Tc,相应地,当前定时器计时周期内定时器操作结束时,所对应的系统时间为定时器计时参考点,设所述定时器计时参考点为tr,对tr和tn进行对比,获取二者之间的差值。
步骤103:根据对比定时器计时参考点与相应的系统时间参考点所获差值,选择休眠补偿休眠时长。
如果定时器计时参考点为tr,系统时间参考点tn=t0+n×Tc,则在当前的定时器计时周期内补偿休眠时长Ta=tn-tr。在该补偿休眠时长内定时器执行补偿休眠操作,用以补偿当前定时器计时参考点与相应的系统时间参考点的误差,其中如果Ta<0,说明定时器计时参考点晚于系统时间参考点,则无法在当前定时器计时周期内补偿所述误差,而需要在下一个定时器计时周期内对所述误差进行补偿。
步骤104:如果Ta大于预定阈值或小于0,则调整下一个定时器计时周期内的休眠时长。
如果Ta大于预定阈值或小于0,则调整下一个定时器计时周期内的休眠时长,所述阈值根据实际需要选择,阈值太小则调整过于频繁,而阈值太大则会造成定时器精度较低,该阈值是定时器计时周期的调整粒度,称为调整单位,一般可以取1/100-1/5个定时器计时周期长。
调整方式可以为:如果Ta大于预定阈值,则增大下一个定时器计时周期内的休眠时长,增大幅度为一个调整单位,如果Ta小于0,则减小下一个定时器计时周期内的休眠时长,减小幅度为一个调整单位,这种调整方式调整范围固定为一个调整粒度,实现容易,即使Ta超过调整单位一倍以上,也可以通过多个定时器计时周期的调整来补偿。
调整方式也可以为:如果Ta大于预定阈值,则增大下一个定时器计时周期内的休眠时长,增大幅度为Ta除以调整单位后取整为倍数的调整单位,如果Ta小于0,则减小下一个定时器计时周期内的休眠时长,减小幅度为Ta的绝对值除以调整单位后取整后加一为倍数的调整单位,这种调整方式更加精确,能够一次性补偿超过调整单位一倍以上的Ta。
例如,取调整单位为1/10定时器计时周期,假设当前定时器计时周期的补偿休眠时长Ta除以调整单位后取整为[Ta/(Tc/10)]=a,a为正整数,则将这a个调整单位加入下一个定时器计时周期的休眠时长内。
比如说[Ta/(Tc/10)]=2,则下一个定时器计时周期的休眠时长Tb增加两个调整单位,以此减少下一个定时器计时周期内的Ta,将下一个定时器计时周期内的操作时长控制在定时器计时周期的后部;或假设当前定时器计时周期的补偿休眠时长Ta除以调整单位后取整为[Ta/(Tc/10)]=-b,b为正整数,则下一个定时器计时周期的休眠时长Tb减少b+1个调整单位,以此来补偿当前定时器计时周期内定时器计时参考点晚于系统时间参考点所带来的误差。具体的,[Ta/(Tc/10)]=-1,则下一个定时器计时周期的休眠时长减少两个调整单位;或例如Ta/(Tc/10)处于0至1之间,说明当前定时器计时周期内定时器计时参考点与系统时间参考点之间的差值小于一个调整单位,则对下一个定时器计时周期的休眠时长不作调整。
步骤101-104的调整操作可以间隔一定定时器计时周期执行一次,例如每隔2个定时器计时周期即执行一次,为了让定时器具有更高的精度,本实施例中选择没有间隔,在每一个定时器计时周期内,均对比定时器计时参考点和系统时间参考点,由此执行补偿休眠操作和选择调整下一个定时器计时周期内的休眠时长。当然,本发明也可以根据实际需要选择间隔至少一个定时器计时周期执行所述调整操作。
举例说明,理论定时器计时周期为100ms,调整单位为10ms,定时开始时间t0为0s,当前处于第100个定时器计时周期内,则系统时间参考点为10s,设当前定时器计时周期内休眠时长为80ms,定时器所执行定时操作结束时所对应的系统时间,也就是定时器计时参考点为9.985s,故当前定时器计时周期操作时长为5ms,则在当前定时器计时周期内补偿休眠时长为15ms,且在下一个定时器计时周期内将休眠时长增加一个调整单位,为90ms;如果定时器所执行定时操作结束时所对应的系统时间,也就是定时器计时参考点为10.005s,则当前定时器计时周期超过了理论定时器计时周期,当前定时器计时周期内不执行所述补偿休眠操作,将下一定时器计时周期的休眠时长减少一个调整单位,为70ms,以此来补偿定时器计时参考点晚于系统时间参考点所带来的误差。
从以上分析可以看出,如果当前定时器计时周期内由于获取时间点的系统调和休眠操作的精度带来一定误差,该误差进入了下一个定时器计时周期内时,下一个定时器计时周期内由于对比定时器计时参考点和系统时间参考点,执行补偿休眠和下一个定时器计时周期内的休眠时长调整,能够消除当前定时器计时周期的误差,避免该误差的进一步累积。
以上所述,仅为本发明的较佳实施例而已,并非用来限定本发明的保护范围。本领域内技术人员应该能够联想到,选择不同的调整间隔,选择不同时间长度作为调整单位,选择不同的定时器计时周期长度和休眠时长,以及其它根据本发明的技术方案及其构思进行相应的等同改变或替换都应该属于本发明的保护范围。
Claims (7)
1.一种提高定时器精度的方法,其特征在于,所述方法包括以下步骤:
A、对比定时器计时参考点与相应的系统时间参考点;
B、根据对比定时器计时参考点与相应的系统时间参考点所获得的差值,休眠补偿休眠时长,且调整下一定时器计时周期内的休眠时长。
2.根据权利要求1所述的提高定时器精度的方法,其特征在于,步骤A中所述对比为:在每个定时器计时周期内执行所述对比操作;或间隔至少一个定时器计时周期执行所述对比操作。
3.根据权利要求1所述的提高定时器精度的方法,其特征在于,步骤B中,所述调整定时器计时周期为:如果定时器计时参考点早于相应的系统时间参考点的时长超过预定阈值,则定时器休眠补偿休眠时长,且增大下一个定时器计时周期内的休眠时长,如果定时器参考点晚于相应的系统时间参考点,则减小下一个定时器计时周期内的休眠时长。
4.根据权利要求3所述的提高定时器精度的方法,其特征在于,所述增大或减小下一个定时器计时周期内的休眠时长的幅度为预定阈值长度。
5.根据权利要求3所述的提高定时器精度的方法,其特征在于,所述增大下一个定时器计时周期的休眠时长的幅度为:对定时器计时参考点早于相应的系统时间参考点的时间段除以预定阈值的商取整,以取整后的值乘以预定阈值长度作为增大幅度;
减小下一个定时器计时周期内的休眠时长的幅度为:对定时器计时参考点晚于相应的系统时间参考点的时间段除以预定阈值的商取整,以取整后加一的值乘以预定阈值长度作为减小幅度。
6.根据权利要求1所述的提高定时器精度的方法,其特征在于,在步骤A之前,进一步包括步骤:执行休眠操作。
7.根据权利要求3所述的提高定时器精度的方法,其特征在于,所述预定阈值为定时器计时周期长度的十分之一。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101639120A CN100562035C (zh) | 2007-10-10 | 2007-10-10 | 提高定时器精度的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101639120A CN100562035C (zh) | 2007-10-10 | 2007-10-10 | 提高定时器精度的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101141514A true CN101141514A (zh) | 2008-03-12 |
CN100562035C CN100562035C (zh) | 2009-11-18 |
Family
ID=39193248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101639120A Expired - Fee Related CN100562035C (zh) | 2007-10-10 | 2007-10-10 | 提高定时器精度的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100562035C (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591405A (zh) * | 2011-01-07 | 2012-07-18 | 成都信息工程学院 | 使用标准时间驯服操作系统定时器事件发生时刻的方法 |
CN109213589A (zh) * | 2018-09-28 | 2019-01-15 | 深圳市景阳科技股份有限公司 | 一种消息处理的方法及装置 |
WO2019024064A1 (zh) * | 2017-08-04 | 2019-02-07 | 深圳市汇顶科技股份有限公司 | 定时方法、时钟设备和终端设备 |
-
2007
- 2007-10-10 CN CNB2007101639120A patent/CN100562035C/zh not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591405A (zh) * | 2011-01-07 | 2012-07-18 | 成都信息工程学院 | 使用标准时间驯服操作系统定时器事件发生时刻的方法 |
WO2019024064A1 (zh) * | 2017-08-04 | 2019-02-07 | 深圳市汇顶科技股份有限公司 | 定时方法、时钟设备和终端设备 |
US10498524B2 (en) | 2017-08-04 | 2019-12-03 | Shenzhen GOODIX Technology Co., Ltd. | Timing method, clock device and terminal device |
CN109213589A (zh) * | 2018-09-28 | 2019-01-15 | 深圳市景阳科技股份有限公司 | 一种消息处理的方法及装置 |
CN109213589B (zh) * | 2018-09-28 | 2020-10-23 | 深圳市景阳科技股份有限公司 | 一种消息处理的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN100562035C (zh) | 2009-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100562035C (zh) | 提高定时器精度的方法 | |
CN102986282A (zh) | 上行链路同步处理 | |
CN104640179B (zh) | 通信装置及频偏校正方法 | |
RU2002114547A (ru) | Способ и устройство повторного запуска мобильной станции по окончании режима ожидания | |
CN102110043A (zh) | 一种cpu占用率的计算方法及装置 | |
CN102316574A (zh) | 一种多模终端系统时钟定时方法及装置 | |
CN100538561C (zh) | 分数除法器系统及方法 | |
CN110245808B (zh) | 一种基于需量控制的钢包炉优化调度方法 | |
US8258881B2 (en) | Method and system for drift reduction in a low power oscillator (LPO) utilized in a wireless communication device | |
CN104730983B (zh) | 一种高精度时间程控方法 | |
CN102117114A (zh) | 一种嵌入式设备省电方法 | |
CN103560783A (zh) | 数字事件发生器、比较器、开关模式能量转换器和方法 | |
CN106569028A (zh) | 一种双芯智能电能表的电量同步处理方法及系统 | |
CN103197577B (zh) | 机器人控制器脉冲同步调整方法及装置 | |
CN103034236A (zh) | 一种基于时分复用的多星敏感器时序同步处理方法 | |
CN102235905A (zh) | 一种洗衣机上水位传感器的误差频率修正方法 | |
CN1202684C (zh) | 能够停止主时钟的移动电话 | |
CN103383546A (zh) | 多时段定时开关机方法及装置 | |
CN101830375A (zh) | 电梯的组管理系统 | |
US20030045323A1 (en) | Cellular phone terminal and intermittent reception control method to be used in the same | |
US6618456B1 (en) | Asynchronous timing oscillator re-synchronizer and method | |
KR102223891B1 (ko) | 대상설비의 ess 용량분배방법 및 ess 용량분배장치 | |
CN100405863C (zh) | 一种移动终端待机过程中校准睡眠处理器的方法 | |
CN100442680C (zh) | 一种外环功率控制的动态调整方法 | |
CN103139887A (zh) | 高速共享控制信道的功率分配方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091118 Termination date: 20191010 |
|
CF01 | Termination of patent right due to non-payment of annual fee |