发明名称 一种无累计误差的定时器控制方法
摘要 本发明公开一种无累计误差的定时器控制方法,该方法能够让多定时器在长时间执行后还能够保持精确的定时功能,而不会产生定时误差。该方法中,首先,把定时器管理和回调执行分开处理,使用消息队列的方式来异步通知。使得消除回调函数执行所带来的函数执行时间开销,消除回调误差。其次,使用系统的相对时间来进行定时器的时间管理,消除了定时器本身指令执行造成的时间开销。系统相对时间指的是系统从开机到现在所经过的时间,这个时间不会随系统时间的变化而变化,因此可以用来准确的计算时间。本发明应用于计算机软件或者通信领域中定时器的累计误差的消除。
申请公布号 CN103455402A 申请公布日期 2013.12.18
申请号 CN201310357952.4 申请日期 2013.08.16
申请人 厦门雅迅网络股份有限公司 发明人 陈华云;郑振贵;韦昌荣;郑福弟;刘伟峰;黄杭星
分类号 G06F11/28(2006.01)I 主分类号 G06F11/28(2006.01)I
代理机构 厦门市诚得知识产权代理事务所(普通合伙) 35209 代理人 李伊飏
主权项 一种无累计误差的定时器控制方法,其特征在于:包括定时器的管理步骤,以及定时器的定时到时之后的处理步骤,具体的,定时器的管理步骤包括:步骤A1:建立定时器管理器,用于管理定时器信息;建立消息队列,用来传递定时器信息;该定时器信息包括定时器ID、定时时间T、定时器回调函数指针、定时器回调函数参数指针;步骤A2:向定时器管理器增加一定时器,为该定时器设定初始时间T0,T0为此时系统的相对时间,相对时间是指系统从开机到此时所经过的时间;步骤A3:定时器管理器检测其内是否有定时器存在,如果没有定时器存在,则循环执行步骤A3;如果有定时器存在,则取出目前指示器所指向的定时器,并把指示器指向下一个定时器,如果指示器已经指向了最后一个定时器,则把指示器指向第一个定时器;步骤A4:判断定时器是否到时,具体是,获取系统当前的相对时间T1,如果T1‑T0等于T或者大于T,则把该定时器信息压入消息队列,并转至步骤A5;如果T1‑T0小于T,则跳到步骤A3;步骤A5:调整定时器的初始时间T0,令T0=T0+T,即把定时器的开始时间加上定时时间作为定时器的新一轮的开始时间,并返回步骤A3继续执行;所述定时器的定时到时之后的处理步骤,具体包括:步骤B1:读取消息队列的内容,如果消息队列内有内容,则读取消息队列内容;步骤B2:获取消息队列内容中的相关定时器的信息;步骤B3:取出定时器中的回调函数指针和回调函数参数指针;步骤B4:执行回调函数,返回步骤B1。
地址 361000 福建省厦门市软件园二期观日路46号