CN105528246A - 一种基于动态计时周期的进程内定时器管理方法及*** - Google Patents
一种基于动态计时周期的进程内定时器管理方法及*** Download PDFInfo
- Publication number
- CN105528246A CN105528246A CN201510888868.4A CN201510888868A CN105528246A CN 105528246 A CN105528246 A CN 105528246A CN 201510888868 A CN201510888868 A CN 201510888868A CN 105528246 A CN105528246 A CN 105528246A
- Authority
- CN
- China
- Prior art keywords
- timer
- cycle
- timing
- count
- thread
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于动态计时周期的进程内定时器管理方法及***,采用统一的计时线程和可动态调整的计时周期,基于并发工作线程池模拟多种周期的定时器,简化了定时器管理,有效解决了软件定时器多、定时线程多、定时精度差的问题,有效提升了软件处理性能。
Description
技术领域
本发明涉及软件设计领域,特别涉及基于动态计时周期的进程内定时器管理方法及***。
背景技术
在软件设计中,定时器被频繁用于界面刷新、数据采集、超时判断等需要周期性执行的业务,因此经常要为各种定时器创建独立的定时线程。特别是对于模块化设计的软件,由于定时器只模块内部可见,导致大量定时线程的出现;即便是共享定时线程,由于线程执行工作增多必然导致定时精度下降;这些都会影响软件性能。
本发明一种基于动态计时周期的进程内定时器管理方法及***,采用统一的计时线程和可动态调整的计时周期,基于并发工作线程池模拟多种周期的定时器,简化了定时器管理,有效解决了软件定时器多、定时线程多、定时精度差的问题,有效提升了软件处理性能。
发明内容
本发明提出一种基于动态计时周期的进程内定时器管理方法及***,有效解决了软件定时器多、定时线程多、定时精度差的问题,提升了软件处理性能。
具体方案如下:
一种基于动态计时周期的进程内定时器管理方法,包括以下步骤:
S1:创建初始化接口,参数包括计时周期t',返回初始化结果;
S2:创建注册定时器接口,参数包括定时器周期T、定时器回调处理函数指针Func和回调参数P,返回定时器ID;
S3:创建注销定时器接口,参数包括定时器ID,无返回值;
S4:创建释放接口:无参数和返回值;
S5:调用初始化接口,初始化计时周期t=t',对应的周期计数Ct=0,初始化定时器管理器对象,启动并发工作线程池,创建并启动计时线程;
S6:调用注册定时器接口,注册定时器Tij,完成定时器的注册参数添加,定时器模块根据注册的定时周期,定时触发回调处理函数Func进行定时处理;
S7:调用注销定时器接口,完成定时器的注销删除;
S8:调用释放接口,停止计时线程,释放并发工作线程池,删除已注册的所有定时器以及模块释放后的资源回收清理。
其中,所述的步骤S5中计时线程启动后,每经过周期t的时间,累加周期计数Ct=Ct+1。
其中,所述的步骤S5中计时器线程处理的具体步骤是:
S51:比较所有的定时器周期计数Ci,如果CtmodCi=0(取余),即Ct为Ci的整数倍,则将Ci对应的所有定时器Tij的Func和P投递到工作线程池中进行定时回调处理。依此循环,直至计时线程退出。
其中,所述的步骤S6中一个或多个周期计数及已注册定时器集合组成定时器管理器。
其中,所述的步骤S6中注册定时器的具体步骤是:
S61:设待注册定时器定时周期为Tx,对应回调函数指针Funcx和回调参数Px,计算所有已注册定时器周期Ci×t与Tx的最小公约数t'。若t≠t',则更新所有的更新计时周期t=t',调整周期计数若t=t',则不做调整;
S62:累加全局计时器ID=ID+1作为新定时器的IDx=ID;
S63:计算Tx对应的周期计数如果Cx不存在,则创建新的周期计数Cx及其对应的定时器映射关系,将计时器对象保存到Cx对应的定时器列表中,并返回对应的定时器IDx;如果Cx已存在,则直接将计时器IDx和计时器对象保存到Cx对应的定时器列表中,并返回对应的定时器IDx。
其中,所述的步骤S7中注销定时器的具体步骤是:
S71:设待注销定时器ID为IDx,根据IDx获取对应定时器对象,计算Tx对应的周期计数如果Cx不存在,则返回失败;如果Cx存在,则从Cx对应的定时器映射中查找定时器ID为IDx的定时器,如果找到则从映射中删除IDx及其映射的计时器;否则返回失败;
S72:重新计算所有已注册定时周期Ci×t的最小公约数,作为计时线程新的计时周期t',更新所有的更新计时周期t=t',调整周期计数
一种基于动态计时周期的进程内定时器管理***,包括:计时线程、定时器管理器、并发工作线程池,所述的计时线程包括计时周期t及对应的周期计数Ct,所述的定时器管理器包括一个或多个定时器Tij及其对应的一个或多个定时周期Ti和一个或多个周期计数Ci,所述的一个或多个定时器Tij对应有一个或多个定时器ID,且定时器ID具有唯一性,所述的并发工作线程池包括一个或多个线程。
其中,所述的周期计数Ct初始值为0,每过一个计时周期t的时间,Ct累加1。
其中,所述的一个或多个定时器Tij均包含三个基本元素{T,Func,P},T为定时器周期,Func为定时器线程回调处理函数指针,P为Func回调处理参数。
其中,所述的定时器管理器还包括一个全局定时器ID,全局定时器ID初始为0,每注册一个新定时器ID累加1,并将累加后的ID作为新定时器的ID。
其中,所述的工作线程池接收定时器的线程回调处理函数指针Func及其对应的参数P执行回调过程,完成最后的定时回调处理。
附图说明
图1示出了实施例的流程结构图;
图2示出了定时器管理器的组成示意图;
图3示出了计时线程处理流程图;
图4示出了定时器注册流程图;
图5示出了注销计时器流程。
具体实施方式
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。现结合附图和具体实施方式对本发明进一步说明。
本实施例由计时线程、定时器管理器、并发工作线程池组成一定时器管理***。
图1示出了实施例的流程结构图,计时线程包括一个计时周期t和一个周期计数Ct,Ct初始值为0,每过一个计时周期t的时间,Ct累加1,即:Ct=Ct+1;
图2示出了定时器管理器的组成,定时器管理器包括一个全局定时器ID、多个周期计数Ci及其对应的多个定时器Tij。其中,全局定时器ID初始为0,每注册一个新定时器ID累加1,并将累加后的ID作为新计时器的ID,以保证计时器ID的唯一性;Ci为周期计数,每个Ci对应一种定时周期Ti,定义为T1i~Tnj对应多个定时器,每个定时器Tij对应定时周期为Ti,周期计数为Ci。每个定时器Tij包含三个基本元素{T,Func,P},T为定时器周期,Func为定时器线程回调处理函数指针,P为Func回调处理参数。这三个基本元素在注册定时器时通过模块接口由上层应用输入,其中P为用户自定义变量,在进行定时回调处理时原样返回。
并发工作线程池包括有多个线程,是定时器触发的执行者,定时器管理器周期性的把定时器的线程回调处理函数指针Func及其对应的参数P投递给工作线程池,由工作线程池执行回调过程,完成最后的定时回调处理。
本领域技术人员应该知道,为确保定时器的ID唯一,本实施例将累加定时器ID作为新定时器ID,其他只要实现定时器ID唯一的方式也可,本实施例只展示一种优选的方式。
本实施例的接口设计如下:
初始化接口:参数包括一个初始计时周期t',单位毫秒,返回初始化结果。调用该接口初始化计时周期t=t',周期计数Ct=0,初始化定时器管理器对象,启动并发工作线程池,最后创建并启动计时线程;
注册定时器接口:参数包括定时器周期T、定时器回调处理函数指针Func和回调参数P,返回定时器ID。调用该接口完成定时器的注参数册添加后,定时器模块会根据注册的定时周期,定时触发回调处理函数Func进行定时处理;
注销定时器接口:参数包括一个定时器ID,无返回值。调用该接口完成定时器的注销删除;注销之后的定时器将会被移除,不再定时触发回调处理函数Func;
释放接口:无参数和返回值。调用该接口将会停止计时线程,释放并发工作线程池,删除已注册的所有定时器以及模块释放后的资源回收清理。
图3示出了计时线程处理流程,包括以下步骤:
S31:计时线程启动,每经过周期t的时间,累加周期计数Ct=Ct+1;
S32:比较所有的周期计数Ci,如果CtmodCi=0(取余),即Ct为Ci的整数倍,则将Ci对应的所有定时器Tij的Func和P投递到工作线程池中进行定时回调处理。依此循环,直至计时线程退出。
图4示出了定时器注册流程,包括以下步骤:
S41:设待注册定时器定时周期为Tx,对应回调函数指针Funcx和回调参数Px,计算所有已注册定时器周期Ci×t与Tx的最小公约数t'。若t≠t',则更新所有的更新计时周期t=t',调整周期计数若t=t',则不做调整;S42:累加全局计时器ID=ID+1作为新定时器的IDx=ID;
S43:计算Tx对应的周期计数如果Cx不存在,则创建新的周期计数Cx及其对应的定时器映射关系,将计时器对象(包括Tx、Funcx和Px)保存到Cx对应的定时器列表中,并返回对应的定时器IDx;如果Cx已存在,则直接将计时器IDx和计时器对象保存到Cx对应的定时器列表中,并返回对应的定时器IDx。
图5示出了注销计时器流程,包括以下步骤:
S51:设待注销定时器ID为IDx,根据IDx获取对应定时器对象,计算Tx对应的周期计数如果Cx不存在,则返回失败;如果Cx存在,则从Cx对应的定时器映射中查找定时器ID为IDx的定时器,如果找到则从映射中删除IDx及其映射的计时器;否则返回失败;
S52:重新计算所有已注册定时周期Ci×t的最小公约数,作为计时线程新的计时周期t',更新所有的更新计时周期t=t',调整周期计数
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
Claims (11)
1.一种基于动态计时周期的进程内定时器管理方法,包括以下步骤:
S1:创建初始化接口,参数包括计时周期t',返回初始化结果;
S2:创建注册定时器接口,参数包括定时器周期T、定时器回调处理函数指针Func和回调参数P,返回定时器ID;
S3:创建注销定时器接口,参数包括定时器ID,无返回值;
S4:创建释放接口:无参数和返回值;
S5:调用初始化接口,初始化计时周期t=t',对应的周期计数Ct=0,初始化定时器管理器对象,启动并发工作线程池,创建并启动计时线程;
S6:调用注册定时器接口,注册定时器Tij,完成定时器的注册参数添加,定时器模块根据注册的定时周期,定时触发回调处理函数Func进行定时处理;
S7:调用注销定时器接口,完成定时器的注销删除;
S8:调用释放接口,停止计时线程,释放并发工作线程池,删除已注册的所有定时器以及模块释放后的资源回收清理。
2.根据权利要求1所述的基于动态计时周期的进程内定时器管理方法,其特征在于:所述的步骤S5中计时线程启动后,每经过周期t的时间,累加周期计数Ct=Ct+1。
3.根据权利要求1所述的基于动态计时周期的进程内定时器管理方法,其特征在于:所述的步骤S5中计时器线程处理的具体步骤是:
S51:比较所有的定时器周期计数Ci,如果CtmodCi=0(取余),即Ct为Ci的整数倍,则将Ci对应的所有定时器Tij的Func和P投递到工作线程池中进行定时回调处理。依此循环,直至计时线程退出。
4.根据权利要求1所述的基于动态计时周期的进程内定时器管理方法,其特征在于:所述的步骤S6中一个或多个周期计数及已注册定时器集合组成定时器管理器。
5.根据权利要求1所述的基于动态计时周期的进程内定时器管理方法,其特征在于:所述的步骤S6中注册定时器的具体步骤是:
S61:设待注册定时器定时周期为Tx,对应回调函数指针Funcx和回调参数Px,计算所有已注册定时器周期Ci×t与Tx的最小公约数t'。若t≠t',则更新所有的更新计时周期t=t',调整周期计数若t=t',则不做调整;
S62:累加全局计时器ID=ID+1作为新定时器的IDx=ID;
S63:计算Tx对应的周期计数如果Cx不存在,则创建新的周期计数Cx及其对应的定时器映射关系,将计时器对象保存到Cx对应的定时器列表中,并返回对应的定时器IDx;如果Cx已存在,则直接将计时器IDx和计时器对象保存到Cx对应的定时器列表中,并返回对应的定时器IDx。
6.根据权利要求1所述的基于动态计时周期的进程内定时器管理方法,其特征在于:所述的步骤S7中注销定时器的具体步骤是:
S71:设待注销定时器ID为IDx,根据IDx获取对应定时器对象,计算Tx对应的周期计数如果Cx不存在,则返回失败;如果Cx存在,则从Cx对应的定时器映射中查找定时器ID为IDx的定时器,如果找到则从映射中删除IDx及其映射的计时器;否则返回失败;
S72:重新计算所有已注册定时周期Ci×t的最小公约数,作为计时线程新的计时周期t',更新所有的更新计时周期t=t',调整周期计数
7.一种基于动态计时周期的进程内定时器管理***,包括:计时线程、定时器管理器、并发工作线程池,所述的计时线程包括计时周期t及对应的周期计数Ct,所述的定时器管理器包括一个或多个定时器Tij及其对应的一个或多个定时周期Ti和一个或多个周期计数Ci,所述的一个或多个定时器Tij对应有一个或多个定时器ID,且定时器ID具有唯一性,所述的并发工作线程池包括一个或多个线程。
8.根据权利要求7所述的***,其特征在于:所述的周期计数Ct初始值为0,每过一个计时周期t的时间,Ct累加1。
9.根据权利要求7所述的***,其特征在于:所述的一个或多个定时器Tij均包含三个基本元素{T,Func,P},T为定时器周期,Func为定时器线程回调处理函数指针,P为Func回调处理参数。
10.根据权利要求7所述的***,其特征在于:所述的定时器管理器还包括一个全局定时器ID,全局定时器ID初始为0,每注册一个新定时器ID累加1,并将累加后的ID作为新定时器的ID。
11.根据权利要求7所述的***,其特征在于:所述的工作线程池接收定时器的线程回调处理函数指针Func及其对应的参数P执行回调过程,完成最后的定时回调处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510888868.4A CN105528246A (zh) | 2015-12-07 | 2015-12-07 | 一种基于动态计时周期的进程内定时器管理方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510888868.4A CN105528246A (zh) | 2015-12-07 | 2015-12-07 | 一种基于动态计时周期的进程内定时器管理方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105528246A true CN105528246A (zh) | 2016-04-27 |
Family
ID=55770491
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510888868.4A Pending CN105528246A (zh) | 2015-12-07 | 2015-12-07 | 一种基于动态计时周期的进程内定时器管理方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105528246A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227615A (zh) * | 2016-07-21 | 2016-12-14 | 福建天泉教育科技有限公司 | 程序启动过程中预防进程卡死的方法及*** |
CN107656826A (zh) * | 2017-09-19 | 2018-02-02 | 光科技股份有限公司 | 一种基于ipc动态维护技术的面向对象用电信息采集终端 |
CN108255515A (zh) * | 2018-01-17 | 2018-07-06 | 广州汇智通信技术有限公司 | 一种实现定时器服务的方法和装置 |
CN108647163A (zh) * | 2018-03-22 | 2018-10-12 | 上海机电工程研究所 | 一种基于外部周期中断的弹载计时方法 |
CN109752988A (zh) * | 2017-11-08 | 2019-05-14 | 东莞市米町源电子科技有限公司 | 一种利用单片机进行终端控制的方法及装置 |
CN110351223A (zh) * | 2018-04-02 | 2019-10-18 | 腾讯科技(深圳)有限公司 | 定时提醒方法、装置和计算机程序介质 |
CN112162820A (zh) * | 2020-09-23 | 2021-01-01 | 广州六环信息科技有限公司 | 计时器的计时方法和装置 |
CN113590875A (zh) * | 2021-07-29 | 2021-11-02 | 武汉中科通达高新技术股份有限公司 | 基于c++的事件处理方法、装置、服务器及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101272564A (zh) * | 2008-04-17 | 2008-09-24 | 中兴通讯股份有限公司 | 一种软实时定时器调度的方法及软实时定时器模块 |
CN101320337A (zh) * | 2008-07-16 | 2008-12-10 | 北京中星微电子有限公司 | 一种定时器及其实现方法 |
CN102455940A (zh) * | 2010-10-29 | 2012-05-16 | 迈普通信技术股份有限公司 | 一种定时器和异步事件的处理方法及*** |
CN102799961A (zh) * | 2012-06-21 | 2012-11-28 | 深圳市汇川控制技术有限公司 | 定时器管理***及方法 |
-
2015
- 2015-12-07 CN CN201510888868.4A patent/CN105528246A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101272564A (zh) * | 2008-04-17 | 2008-09-24 | 中兴通讯股份有限公司 | 一种软实时定时器调度的方法及软实时定时器模块 |
CN101320337A (zh) * | 2008-07-16 | 2008-12-10 | 北京中星微电子有限公司 | 一种定时器及其实现方法 |
CN102455940A (zh) * | 2010-10-29 | 2012-05-16 | 迈普通信技术股份有限公司 | 一种定时器和异步事件的处理方法及*** |
CN102799961A (zh) * | 2012-06-21 | 2012-11-28 | 深圳市汇川控制技术有限公司 | 定时器管理***及方法 |
Non-Patent Citations (1)
Title |
---|
宋幸: "基于SaaS的通用定时任务调度组件的研究与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227615B (zh) * | 2016-07-21 | 2019-05-07 | 福建天泉教育科技有限公司 | 程序启动过程中预防进程卡死的方法及*** |
CN106227615A (zh) * | 2016-07-21 | 2016-12-14 | 福建天泉教育科技有限公司 | 程序启动过程中预防进程卡死的方法及*** |
CN107656826A (zh) * | 2017-09-19 | 2018-02-02 | 光科技股份有限公司 | 一种基于ipc动态维护技术的面向对象用电信息采集终端 |
CN107656826B (zh) * | 2017-09-19 | 2020-06-26 | 光一科技股份有限公司 | 一种基于ipc动态维护技术的面向对象用电信息采集终端 |
CN109752988B (zh) * | 2017-11-08 | 2021-11-09 | 东莞市米町源电子科技有限公司 | 一种利用单片机进行终端控制的方法及装置 |
CN109752988A (zh) * | 2017-11-08 | 2019-05-14 | 东莞市米町源电子科技有限公司 | 一种利用单片机进行终端控制的方法及装置 |
CN108255515A (zh) * | 2018-01-17 | 2018-07-06 | 广州汇智通信技术有限公司 | 一种实现定时器服务的方法和装置 |
CN108647163A (zh) * | 2018-03-22 | 2018-10-12 | 上海机电工程研究所 | 一种基于外部周期中断的弹载计时方法 |
CN108647163B (zh) * | 2018-03-22 | 2020-10-09 | 上海机电工程研究所 | 一种基于外部周期中断的弹载计时方法 |
CN110351223A (zh) * | 2018-04-02 | 2019-10-18 | 腾讯科技(深圳)有限公司 | 定时提醒方法、装置和计算机程序介质 |
CN110351223B (zh) * | 2018-04-02 | 2021-09-17 | 腾讯科技(深圳)有限公司 | 定时提醒方法、装置和计算机程序介质 |
CN112162820A (zh) * | 2020-09-23 | 2021-01-01 | 广州六环信息科技有限公司 | 计时器的计时方法和装置 |
CN113590875A (zh) * | 2021-07-29 | 2021-11-02 | 武汉中科通达高新技术股份有限公司 | 基于c++的事件处理方法、装置、服务器及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105528246A (zh) | 一种基于动态计时周期的进程内定时器管理方法及*** | |
CN109002362A (zh) | 一种服务方法、装置、***以及电子设备 | |
PH12020550563A1 (en) | Autonomous and integrated system, method and computer program for dynamic optimisation and allocation of resources for defined spaces and time periods | |
CN103458052B (zh) | 一种基于IaaS云平台的资源调度方法和装置 | |
CN103207807B (zh) | 任务调度方法和装置 | |
CN104506620A (zh) | 一种可扩展的自动化计算服务平台及其构建方法 | |
JP2016521422A5 (zh) | ||
CN105260255A (zh) | 一种多处理器核片上***的看门狗实现方法 | |
CN106796500A (zh) | 分布式文件***的版本间映射 | |
EP2228726A3 (en) | A method and system for task modeling of mobile phone applications | |
CN103106222A (zh) | 定时器的处理方法及装置 | |
CN107682391B (zh) | 电子装置、服务器分配控制方法和计算机可读存储介质 | |
CN105677455A (zh) | 一种设备调度方法及任务管理器 | |
CN106951254B (zh) | 支付***中相似业务功能模块复用的方法及装置 | |
CN109840262A (zh) | 数据统计方法及相关装置 | |
CN106227293A (zh) | 一种***时钟 | |
CN102789394A (zh) | 一种并行处理消息的方法、装置、节点及服务器集群 | |
CN103220166B (zh) | 服务器集群的license管理方法 | |
US10275289B2 (en) | Coexistence of message-passing-like algorithms and procedural coding | |
CN109800069A (zh) | 一种实现数据治理的方法及装置 | |
CN106681692A (zh) | 控制装置、集成电路及任务栈的管理方法 | |
CN104123303A (zh) | 一种提供数据的方法及装置 | |
CN106982131A (zh) | 发起vnf实例化的方法、装置及*** | |
US20170262487A1 (en) | Using Message-Passing With Procedural Code In A Database Kernel | |
CN110083602A (zh) | 一种基于hive表的数据存储及数据处理的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160427 |
|
WD01 | Invention patent application deemed withdrawn after publication |