一种定时器管理方法技术

技术编号:38899486 阅读:14 留言:0更新日期:2023-09-22 14:19
本申请提供一种定时器管理方法,该方案包括以下步骤:对基准定时器初始化,定义定时器管理结构管理基准定时器,建立定时数组,定时数组包括多个数组元素,赋予各数组元素初始值,定时数组具有初始休眠时间;对基准定时器设置初始定时值,遍历定时数组,判断数组元素为未被占有状态时,存储当前的调度时刻,计算校正时间,基于校正时间和初始休眠时间,计算更新休眠时间,选取初始定时值与定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间,设置修正触发时间,基准定时器触发后,记录此次触发时刻,并更新上次触发时刻。该方案获得修正后的真正触发时间,将真正触发时间传入基准定时器执行定时任务可提升定时准确性。准定时器执行定时任务可提升定时准确性。准定时器执行定时任务可提升定时准确性。

【技术实现步骤摘要】
一种定时器管理方法


[0001]本申请涉及软件定时器
,具体涉及一种定时器管理方法。

技术介绍

[0002]定时器是指从指定的时刻开始,经过一个指定时间,然后触发一个超时事件并进行处理,用户可以自定义定时器的周期与频率。定时器有硬件定时器和软件定时器之分,软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,软件定时器精度较低。
[0003]在计算机控制系统中,软件定时器应用广泛,但由于软件定时器自身需要经过调取时间、响应任务等运行流程,这些流程耗费的时间无法进行校正而影响最终定时的准确性,而软件定时器精度不高的限制,导致定时器在各类定时任务中准确性欠缺,无法有效满足定时需求,这往往影响计算机控制系统的运行,降低用户的应用体验。

技术实现思路

[0004]鉴于现有技术中的上述缺陷或不足,本申请旨在提供一种定时器管理方法,包括:
[0005]S1、对基准定时器进行初始化;定义时间变量结构体类型变量,所述时间变量结构体类型变量存储有所述基准定时器的上次触发时刻;
[0006]S2、定义定时器管理结构,所述定时器管理结构用于管理所述基准定时器;根据所述定时器管理结构建立定时数组,所述定时数组包括多个数组元素,并赋予各所述数组元素初始值,所述定时数组具有初始休眠时间;
[0007]S3、对所述基准定时器设置初始定时值,遍历所述定时数组,判断其中一个所述数组元素为未被占有状态时,所述时间变量结构体类型变量存储当前的调度时刻;
[0008]S4、计算校正时间,所述校正时间为所述调度时刻与所述上次触发时刻的差值;
[0009]S5、基于所述校正时间和所述初始休眠时间,计算更新休眠时间;
[0010]S6、基于所述更新休眠时间,选取所述初始定时值与所述定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间;
[0011]S7、对所述基准定时器设置所述修正触发时间,启动所述基准定时器,所述基准定时器触发后,记录此次触发时刻,并更新所述时间变量结构体类型变量中存储的所述上次触发时刻。
[0012]根据本申请实施例提供的技术方案,S5包括以下步骤:
[0013]S51、判断所述初始休眠时间大于所述校正时间且所述初始休眠时间与所述校正时间的差值小于所述初始定时值时,计算更新休眠时间,所述更新休眠时间为所述校正时间与所述初始定时值之和。
[0014]根据本申请实施例提供的技术方案,所述时间变量结构体类型变量存储的所述上次触发时刻包括秒级别和纳秒级别;S7中对所述基准定时器设置所述修正触发时间,包括以下步骤:
[0015]S71、将所述修正触发时间转化为所述时间变量结构体类型变量;
[0016]S72、将所述修正触发时间分解为秒级别和纳秒级别,将所述修正触发时间传入所述基准定时器中。
[0017]根据本申请实施例提供的技术方案,S7中所述基准定时器触发后,记录此次触发时刻,包括以下步骤:
[0018]S74、使用UNIX标准时间获取函数gettimeofday获取所述此次触发时刻,并将所述此次触发时刻存入所述时间变量结构体类型变量中。
[0019]根据本申请实施例提供的技术方案,所述定时器管理结构包括回调函数,所述回调函数以所述基准定时器的ID为参数;S74之前,包括以下步骤:
[0020]S73、配置所述回调函数,所述基准定时器触发后,所述回调函数触发所述UNIX标准时间获取函数gettimeofday。
[0021]根据本申请实施例提供的技术方案,所述定时器管理结构还包括:所述基准定时器的当前状态、所述基准定时器ID、单次触发值、周期触发值;所述当前状态包括未被占有状态、待触发状态、触发状态、周期触发状态。
[0022]根据本申请实施例提供的技术方案,所述数组元素长度为一个字节长度0xFF,所述初始值分别设置:当前状态为待触发状态、回调函数为零,所述基准定时器ID为零,单次触发值为零、周期触发值为零。
[0023]综上所述,本申请提出一种定时器管理方法,该方案通过包括以下步骤:对基准定时器进行初始化,定义时间变量结构体类型变量,时间变量结构体类型变量存储有基准定时器的上次触发时刻;定义定时器管理结构,定时器管理结构用于管理基准定时器;根据定时器管理结构建立定时数组,定时数组包括多个数组元素,并赋予各数组元素初始值,定时数组具有初始休眠时间;对基准定时器设置初始定时值,遍历定时数组,判断其中一个数组元素为未被占有状态时,时间变量结构体类型变量存储当前的调度时刻;计算校正时间,校正时间为调度时刻与上次触发时刻的差值;基于校正时间和初始休眠时间,计算更新休眠时间;基于更新休眠时间,选取初始定时值与定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间;对基准定时器设置修正触发时间,启动基准定时器,基准定时器触发后,记录此次触发时刻,并更新时间变量结构体类型变量中存储的上次触发时刻。该方案通过构建定时器管理结构,使用多个数组元素管理基准定时器,在基准定时器启动定时任务之前,通过计算数组元素响应的时间,计算出其校准时间,获得修正后的真正触发时间,将真正触发时间传入基准定时器执行定时任务可提升定时准确性。
附图说明
[0024]图1为本申请实施例提供的定时器管理方法的步骤流程图。
具体实施方式
[0025]下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关专利技术,而非对该专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与专利技术相关的部分。
[0026]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相
互组合。下面将参考附图并结合实施例来详细说明本申请。
[0027]诚如
技术介绍
中提到的,针对现有技术中的问题,本申请提出了一种定时器管理方法,请参考图1所示,包括以下步骤:
[0028]S1、对基准定时器进行初始化;定义时间变量结构体类型变量,所述时间变量结构体类型变量存储有所述基准定时器的上次触发时刻;
[0029]S2、定义定时器管理结构,所述定时器管理结构用于管理所述基准定时器;根据所述定时器管理结构建立定时数组,所述定时数组包括多个数组元素,并赋予各所述数组元素初始值,所述定时数组具有初始休眠时间;
[0030]S3、对所述基准定时器设置初始定时值,遍历所述定时数组,判断其中一个所述数组元素为未被占有状态时,所述时间变量结构体类型变量存储当前的调度时刻;
[0031]S4、计算校正时间,所述校正时间为所述调度时刻与所述上次触发时刻的差值;
[0032]S5、基于所述校正时间和所述初始休眠时间,计算更新休眠时间;
[0033]S6、基于所述更新休眠时间,选取所述初始定时值与所述定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间;<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种定时器管理方法,其特征在于,包括以下步骤:S1、对基准定时器进行初始化;定义时间变量结构体类型变量,所述时间变量结构体类型变量存储有所述基准定时器的上次触发时刻;S2、定义定时器管理结构,所述定时器管理结构用于管理所述基准定时器;根据所述定时器管理结构建立定时数组,所述定时数组包括多个数组元素,并赋予各所述数组元素初始值,所述定时数组具有初始休眠时间;S3、对所述基准定时器设置初始定时值,遍历所述定时数组,判断其中一个所述数组元素为未被占有状态时,所述时间变量结构体类型变量存储当前的调度时刻;S4、计算校正时间,所述校正时间为所述调度时刻与所述上次触发时刻的差值;S5、基于所述校正时间和所述初始休眠时间,计算更新休眠时间;S6、基于所述更新休眠时间,选取所述初始定时值与所述定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间;S7、对所述基准定时器设置所述修正触发时间,启动所述基准定时器,所述基准定时器触发后,记录此次触发时刻,并更新所述时间变量结构体类型变量中存储的所述上次触发时刻。2.根据权利要求1所述的定时器管理方法,其特征在于:S5包括以下步骤:S51、判断所述初始休眠时间大于所述校正时间且所述初始休眠时间与所述校正时间的差值小于所述初始定时值时,计算更新休眠时间,所述更新休眠时间为所述校正时间与所述初始定时值之和。3.根据权利要求1所述的定时器管理方法,其特征在于:所述时间...

【专利技术属性】
技术研发人员:王雨龙
申请(专利权)人:天津津航计算技术研究所
类型:发明
国别省市:

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

1