CN116775250A - 一种定时器管理方法 - Google Patents
一种定时器管理方法 Download PDFInfo
- Publication number
- CN116775250A CN116775250A CN202310790607.3A CN202310790607A CN116775250A CN 116775250 A CN116775250 A CN 116775250A CN 202310790607 A CN202310790607 A CN 202310790607A CN 116775250 A CN116775250 A CN 116775250A
- Authority
- CN
- China
- Prior art keywords
- time
- timer
- timing
- trigger
- array
- 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.)
- Pending
Links
- 238000007726 management method Methods 0.000 title claims abstract description 40
- 230000001960 triggered effect Effects 0.000 claims abstract description 33
- 230000005059 dormancy Effects 0.000 claims abstract description 17
- 230000004622 sleep time Effects 0.000 claims abstract description 15
- 230000000737 periodic effect Effects 0.000 claims description 11
- 238000000034 method Methods 0.000 claims description 10
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Measurement Of Unknown Time Intervals (AREA)
Abstract
本申请提供一种定时器管理方法,该方案包括以下步骤:对基准定时器初始化,定义定时器管理结构管理基准定时器,建立定时数组,定时数组包括多个数组元素,赋予各数组元素初始值,定时数组具有初始休眠时间;对基准定时器设置初始定时值,遍历定时数组,判断数组元素为未被占有状态时,存储当前的调度时刻,计算校正时间,基于校正时间和初始休眠时间,计算更新休眠时间,选取初始定时值与定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间,设置修正触发时间,基准定时器触发后,记录此次触发时刻,并更新上次触发时刻。该方案获得修正后的真正触发时间,将真正触发时间传入基准定时器执行定时任务可提升定时准确性。
Description
技术领域
本申请涉及软件定时器技术领域,具体涉及一种定时器管理方法。
背景技术
定时器是指从指定的时刻开始,经过一个指定时间,然后触发一个超时事件并进行处理,用户可以自定义定时器的周期与频率。定时器有硬件定时器和软件定时器之分,软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,软件定时器精度较低。
在计算机控制系统中,软件定时器应用广泛,但由于软件定时器自身需要经过调取时间、响应任务等运行流程,这些流程耗费的时间无法进行校正而影响最终定时的准确性,而软件定时器精度不高的限制,导致定时器在各类定时任务中准确性欠缺,无法有效满足定时需求,这往往影响计算机控制系统的运行,降低用户的应用体验。
发明内容
鉴于现有技术中的上述缺陷或不足,本申请旨在提供一种定时器管理方法,包括:
S1、对基准定时器进行初始化;定义时间变量结构体类型变量,所述时间变量结构体类型变量存储有所述基准定时器的上次触发时刻;
S2、定义定时器管理结构,所述定时器管理结构用于管理所述基准定时器;根据所述定时器管理结构建立定时数组,所述定时数组包括多个数组元素,并赋予各所述数组元素初始值,所述定时数组具有初始休眠时间;
S3、对所述基准定时器设置初始定时值,遍历所述定时数组,判断其中一个所述数组元素为未被占有状态时,所述时间变量结构体类型变量存储当前的调度时刻;
S4、计算校正时间,所述校正时间为所述调度时刻与所述上次触发时刻的差值;
S5、基于所述校正时间和所述初始休眠时间,计算更新休眠时间;
S6、基于所述更新休眠时间,选取所述初始定时值与所述定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间;
S7、对所述基准定时器设置所述修正触发时间,启动所述基准定时器,所述基准定时器触发后,记录此次触发时刻,并更新所述时间变量结构体类型变量中存储的所述上次触发时刻。
根据本申请实施例提供的技术方案,S5包括以下步骤:
S51、判断所述初始休眠时间大于所述校正时间且所述初始休眠时间与所述校正时间的差值小于所述初始定时值时,计算更新休眠时间,所述更新休眠时间为所述校正时间与所述初始定时值之和。
根据本申请实施例提供的技术方案,所述时间变量结构体类型变量存储的所述上次触发时刻包括秒级别和纳秒级别;S7中对所述基准定时器设置所述修正触发时间,包括以下步骤:
S71、将所述修正触发时间转化为所述时间变量结构体类型变量;
S72、将所述修正触发时间分解为秒级别和纳秒级别,将所述修正触发时间传入所述基准定时器中。
根据本申请实施例提供的技术方案,S7中所述基准定时器触发后,记录此次触发时刻,包括以下步骤:
S74、使用UNIX标准时间获取函数gettimeofday获取所述此次触发时刻,并将所述此次触发时刻存入所述时间变量结构体类型变量中。
根据本申请实施例提供的技术方案,所述定时器管理结构包括回调函数,所述回调函数以所述基准定时器的ID为参数;S74之前,包括以下步骤:
S73、配置所述回调函数,所述基准定时器触发后,所述回调函数触发所述UNIX标准时间获取函数gettimeofday。
根据本申请实施例提供的技术方案,所述定时器管理结构还包括:所述基准定时器的当前状态、所述基准定时器ID、单次触发值、周期触发值;所述当前状态包括未被占有状态、待触发状态、触发状态、周期触发状态。
根据本申请实施例提供的技术方案,所述数组元素长度为一个字节长度0xFF,所述初始值分别设置:当前状态为待触发状态、回调函数为零,所述基准定时器ID为零,单次触发值为零、周期触发值为零。
综上所述,本申请提出一种定时器管理方法,该方案通过包括以下步骤:对基准定时器进行初始化,定义时间变量结构体类型变量,时间变量结构体类型变量存储有基准定时器的上次触发时刻;定义定时器管理结构,定时器管理结构用于管理基准定时器;根据定时器管理结构建立定时数组,定时数组包括多个数组元素,并赋予各数组元素初始值,定时数组具有初始休眠时间;对基准定时器设置初始定时值,遍历定时数组,判断其中一个数组元素为未被占有状态时,时间变量结构体类型变量存储当前的调度时刻;计算校正时间,校正时间为调度时刻与上次触发时刻的差值;基于校正时间和初始休眠时间,计算更新休眠时间;基于更新休眠时间,选取初始定时值与定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间;对基准定时器设置修正触发时间,启动基准定时器,基准定时器触发后,记录此次触发时刻,并更新时间变量结构体类型变量中存储的上次触发时刻。该方案通过构建定时器管理结构,使用多个数组元素管理基准定时器,在基准定时器启动定时任务之前,通过计算数组元素响应的时间,计算出其校准时间,获得修正后的真正触发时间,将真正触发时间传入基准定时器执行定时任务可提升定时准确性。
附图说明
图1为本申请实施例提供的定时器管理方法的步骤流程图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
诚如背景技术中提到的,针对现有技术中的问题,本申请提出了一种定时器管理方法,请参考图1所示,包括以下步骤:
S1、对基准定时器进行初始化;定义时间变量结构体类型变量,所述时间变量结构体类型变量存储有所述基准定时器的上次触发时刻;
S2、定义定时器管理结构,所述定时器管理结构用于管理所述基准定时器;根据所述定时器管理结构建立定时数组,所述定时数组包括多个数组元素,并赋予各所述数组元素初始值,所述定时数组具有初始休眠时间;
S3、对所述基准定时器设置初始定时值,遍历所述定时数组,判断其中一个所述数组元素为未被占有状态时,所述时间变量结构体类型变量存储当前的调度时刻;
S4、计算校正时间,所述校正时间为所述调度时刻与所述上次触发时刻的差值;
S5、基于所述校正时间和所述初始休眠时间,计算更新休眠时间;
S6、基于所述更新休眠时间,选取所述初始定时值与所述定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间;
S7、对所述基准定时器设置所述修正触发时间,启动所述基准定时器,所述基准定时器触发后,记录此次触发时刻,并更新所述时间变量结构体类型变量中存储的所述上次触发时刻。
具体地,启用硬件定时器或者在使用POSIX定时器对基准定时器进行初始化操作。
具体地,定义所述定时数组timers,所述定时数组中数组元素的类型为所述定时器管理结构s_timer_man。所述定时数组的长度为一个字节长度0xFF。
具体地,将异步通知结构(struct sigevent)中参数分别配置为线程中触发回调函数方法以及将回调函数配置为timer_notify。使用timer_create方法启动所述基准定时器。当所述回调函数timer_notify触发后,循环进行迭代过程,具体地,计算下一次的校正时间。
具体地,工作流程为:先建立一个定时器管理结构用于管理基准定时器,再定义时间变量结构体类型变量,该变量用于获取并存储当前时刻,在每次触发时均记录并存储,通过管理结构中的各所述数组元素获得校正时间,校正时间用于修正设定的初始定时值,将修正后的修正触发时间传入到所述基准定时器并启动所述基准定时器,此时所述基准定时器触发的时间即为准确时间,所述基准定时器触发时将此次触发时刻更新为上次触发时刻,更新后的上次触发时刻作为下次继续进行校正的基础,不断迭代运行,实现管理定时器,提升其准确性的技术效果。
在一优选实施例中,S5包括以下步骤:
S51、判断所述初始休眠时间大于所述校正时间且所述初始休眠时间与所述校正时间的差值小于所述初始定时值时,计算更新休眠时间,所述更新休眠时间为所述校正时间与所述初始定时值之和。
具体地,所述初始休眠时间作为中间变量,用于修正定时时间。
在一优选实施例中,所述时间变量结构体类型变量存储的所述上次触发时刻包括秒级别和纳秒级别;S7中对所述基准定时器设置所述修正触发时间,包括以下步骤:
S71、将所述修正触发时间转化为所述时间变量结构体类型变量;
S72、将所述修正触发时间分解为秒级别和纳秒级别,将所述修正触发时间传入所述基准定时器中。
具体地,通过上述方法设置完定时时间后,对当前下标为row_number的数组元素分别进行赋值,将此时所述基准定时器状态修改为待触发状态TIMER_ARMED。
在一优选实施例中,S7中所述基准定时器触发后,记录此次触发时刻,包括以下步骤:
S74、使用UNIX标准时间获取函数gettimeofday获取所述此次触发时刻,并将所述此次触发时刻存入所述时间变量结构体类型变量中。
在一优选实施例中,所述定时器管理结构包括回调函数,所述回调函数以所述基准定时器的ID为参数;S74之前,包括以下步骤:
S73、配置所述回调函数,所述基准定时器触发后,所述回调函数触发所述UNIX标准时间获取函数gettimeofday。
在一优选实施例中,所述定时器管理结构还包括:所述基准定时器的当前状态、所述基准定时器ID、单次触发值、周期触发值;所述当前状态包括未被占有状态、待触发状态、触发状态、周期触发状态。
在一优选实施例中,所述数组元素长度为一个字节长度0xFF,所述初始值分别设置:当前状态为待触发状态、回调函数为零,所述基准定时器ID为零,单次触发值为零、周期触发值为零。
具体地,所述定时器管理结构s_timer_man包括:①当前定时器状态,共四种状态,包括:未被占用状态TIMER_FREE、待触发状态TIMER_ARMED、触发状态TIMER_TRIG、周期触发状态TIMER_TRIG_PERIOD;②定时器触发回调函数,回调函数以定时器ID为参数。③定时器ID④单次定时器触发值value⑤周期定时器触发值初始值;将所述定时器管理结构的初始值分别设置为①TIMER_FREE②零③零④零⑤零。
具体地,在获得修正触发时间后,使用所述基准定时器进行定时,定时时间为所述修正触发时间real_timer_value,单位为微秒,将所述修正触发时间real_timer_value转化为所述时间变量结构体(struct timeval)类型变量,将所述修正触发时间real_timer_value分解为秒和纳秒,使用timer_settime设置定时时间;定时结束时触发timer_notify函数,进入函数后使用gettimeofday将获取到的当前触发时刻存储至所述时间变量结构体类型变量last_sig中,对线程上锁,然后时间调度。
具体地,当定时结束时,所述基准定时器触发时,使用UNIX标准时间获取函数gettimeofday获取当前时刻,并将次时刻存储至所述时间变量结构体类型变量last_sig中,使用EnterMutex()进行上锁,并转到以下步骤,以下步骤运行完成后使用LeaveMutex()进行解锁。
在基准定时器触发时,计算从上一次定时触发到本次时间调度已过去的时间,使用gettimeofday函数获取当前时间curr_sig,使用当前时间curr_sig和last_sig的差计算已经过去的时间overrun。修正下次触发时间real_total_sleep_time为total_sleep_time与overrun之和。
对所述定时数组timers进行遍历,如果其中一个数组元素状态为待触发状态TIMER_ARMED,则执行以下步骤,否则,继续判断下一个数组元素状态。
判断当前定时器触发值value小于或等于下次触发时间real_total_sleep_time的值时,则将此数组元素状态修改为待触发状态TIMER_TRIGED,再次遍历所述定时数组,数组元素为待触发状态TIMER_TRIGGED的,进行回调函数处理操作,同时将此数组元素状态调整为未被占用状态TIMER_FREE。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。以上所述仅是本申请的优选实施方式,应当指出,由于文字表达的有限性,而客观上存在无限的具体结构,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进、润饰或变化,也可以将上述技术特征以适当的方式进行组合;这些改进润饰、变化或组合,或未经改进将发明的构思和技术方案直接应用于其他场合的,均应视为本申请的保护范围。
Claims (7)
1.一种定时器管理方法,其特征在于,包括以下步骤:
S1、对基准定时器进行初始化;定义时间变量结构体类型变量,所述时间变量结构体类型变量存储有所述基准定时器的上次触发时刻;
S2、定义定时器管理结构,所述定时器管理结构用于管理所述基准定时器;根据所述定时器管理结构建立定时数组,所述定时数组包括多个数组元素,并赋予各所述数组元素初始值,所述定时数组具有初始休眠时间;
S3、对所述基准定时器设置初始定时值,遍历所述定时数组,判断其中一个所述数组元素为未被占有状态时,所述时间变量结构体类型变量存储当前的调度时刻;
S4、计算校正时间,所述校正时间为所述调度时刻与所述上次触发时刻的差值;
S5、基于所述校正时间和所述初始休眠时间,计算更新休眠时间;
S6、基于所述更新休眠时间,选取所述初始定时值与所述定时数组16位最大值(0xFFFF)中的较小值作为修正触发时间;
S7、对所述基准定时器设置所述修正触发时间,启动所述基准定时器,所述基准定时器触发后,记录此次触发时刻,并更新所述时间变量结构体类型变量中存储的所述上次触发时刻。
2.根据权利要求1所述的定时器管理方法,其特征在于:S5包括以下步骤:
S51、判断所述初始休眠时间大于所述校正时间且所述初始休眠时间与所述校正时间的差值小于所述初始定时值时,计算更新休眠时间,所述更新休眠时间为所述校正时间与所述初始定时值之和。
3.根据权利要求1所述的定时器管理方法,其特征在于:所述时间变量结构体类型变量存储的所述上次触发时刻包括秒级别和纳秒级别;S7中对所述基准定时器设置所述修正触发时间,包括以下步骤:
S71、将所述修正触发时间转化为所述时间变量结构体类型变量;
S72、将所述修正触发时间分解为秒级别和纳秒级别,将所述修正触发时间传入所述基准定时器中。
4.根据权利要求1所述的定时器管理方法,其特征在于:S7中所述基准定时器触发后,记录此次触发时刻,包括以下步骤:
S74、使用UNIX标准时间获取函数gettimeofday获取所述此次触发时刻,并将所述此次触发时刻存入所述时间变量结构体类型变量中。
5.根据权利要求4所述的定时器管理方法,其特征在于:所述定时器管理结构包括回调函数,所述回调函数以所述基准定时器的ID为参数;S74之前,包括以下步骤:
S73、配置所述回调函数,所述基准定时器触发后,所述回调函数触发所述UNIX标准时间获取函数gettimeofday。
6.根据权利要求1所述的定时器管理方法,其特征在于:所述定时器管理结构还包括:所述基准定时器的当前状态、所述基准定时器ID、单次触发值、周期触发值;所述当前状态包括未被占有状态、待触发状态、触发状态、周期触发状态。
7.根据权利要求6所述的定时器管理方法,其特征在于:所述数组元素长度为一个字节长度0xFF,所述初始值分别设置:当前状态为待触发状态、回调函数为零,所述基准定时器ID为零,单次触发值为零、周期触发值为零。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310790607.3A CN116775250A (zh) | 2023-06-27 | 2023-06-27 | 一种定时器管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310790607.3A CN116775250A (zh) | 2023-06-27 | 2023-06-27 | 一种定时器管理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116775250A true CN116775250A (zh) | 2023-09-19 |
Family
ID=88013175
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310790607.3A Pending CN116775250A (zh) | 2023-06-27 | 2023-06-27 | 一种定时器管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116775250A (zh) |
-
2023
- 2023-06-27 CN CN202310790607.3A patent/CN116775250A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20070093961A (ko) | 고해상도 타이머-효율적인 슬라이딩 윈도우 | |
CN109981737B (zh) | 一种网络请求的处理方法、装置、终端及存储介质 | |
CN109857528B (zh) | 数据迁移的速度调整方法、装置、存储介质和移动终端 | |
CN111008072A (zh) | 任务调度方法、装置、存储介质及电子设备 | |
CN106814789B (zh) | 一种计时方法及装置 | |
CN110362554B (zh) | 定时器的设定方法、装置、设备及计算机可读存储介质 | |
CN116775250A (zh) | 一种定时器管理方法 | |
EP1586995B1 (en) | Digital controller controlling execution of periodic control tasks | |
CN112948072A (zh) | 一种基于时间与依赖关系的大数据任务调度系统及方法 | |
KR102176763B1 (ko) | 능동적 가변 샘플링 및 능동적 가변 위상 제어를 이용한 adc 샘플링 및 리소스 사용 최적화 방법 | |
CN105550028A (zh) | 一种基于缓存锁的多任务时序执行方法及系统 | |
CN112448883A (zh) | 消息推送方法、装置、计算机设备和存储介质 | |
KR101645260B1 (ko) | 복수의 제어기간의 정밀한 시간 기록을 포함하는 데이터 동기화 시스템 및 방법 | |
CN115347970B (zh) | 电力实时仿真系统的时钟同步方法、装置及设备 | |
CN115061515A (zh) | 温度补偿方法、电路、芯片、及电子设备 | |
CN114281504A (zh) | 一种任务调度方法、装置、电子设备及计算机可读介质 | |
CN111552587A (zh) | 一种基于滑动时间窗的服务熔断方法 | |
CN115442244B (zh) | 电力实时仿真中通信间隔的校准方法、装置及相关设备 | |
CN111913796A (zh) | 离线系统延时调度时间间隔的生成方法和延时调度方法 | |
CN111831380A (zh) | 任务的执行方法及装置、存储介质和电子装置 | |
CN115459897B (zh) | 电力实时仿真中的步长同步校准方法、装置及相关设备 | |
CN113742042B (zh) | 一种定时器处理方法、装置、设备及可读存储介质 | |
JP5101403B2 (ja) | 情報処理装置およびその周期タスク実行方法 | |
CN116932417B (zh) | 一种性能调优方法及装置 | |
US20240273316A1 (en) | A method and apparatus for sustaining a constant time period value for operation and answering by a tag for an nfc transceiver |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |