软件多定时器动态管理方法技术

技术编号:11117366 阅读:144 留言:0更新日期:2015-03-06 16:25
本发明专利技术提供了一种软件多定时器动态管理方法,首先,定义数据结构,存储定时器标识和定时器超时处理方法;然后,定义队列,存储多定时器信息,每打开一个定时器,将此定时器的标识和处理方法放到队列中;每关闭一个定时器,就将此定时器的标识和处理方法从队列中删除;开启定时器,将定时器信息加入队列;从队列中取出一个节点,判断节点中存储的定时器标识是否与当前超时的定时器标识相同,若相同则该节点对应的定时器超时,按照节点中对应的处理方法处理;否则,判断是否已经取出所有节点,若是,则结束操作;否则,重新提取节点判断。本发明专利技术减少了多定时器动态开启关闭时对未开启定时器的非必要查询,减少了CPU开销,提高了系统运行速度。

【技术实现步骤摘要】

本专利技术涉及计算机领域,具体地,涉及一种。
技术介绍
定时器,从字面理解,就是一个时钟,在设定了定时时间之后,经历了设定的时间 之后,就会通知设置定时器的人员,时间已经到了,可以进行下一步工作了,在日常生活中, 我们经常能接触到定时器,例如,半自动洗衣机中就有定时器,从开始洗衣,旋动定时旋钮, 定时器就开启,到定时旋钮回到0,定时器时间到,洗衣结束,可以进行下一步放掉脏水等工 作了。我们这里讲的定时器是在做计算机软件编程时,使用到的一种软件定时器,计算机软 件逻辑也经常会出现需要设定一个或多个时间,在时间到了之后开始做下一步工作。例如 全自动洗衣机,里面有一个计算机控制板,这个计算机控制板中运行的计算机软件就有我 们所说的定时器,软件会自动设置定时器,开始第一步工作,在定时器时间到了之后在设置 定时器开始第二步工作等。 在嵌入式系统中,使用Microsoft Visual C++编写软件代码同时对多个通信节点 进行通信超时监视时,经常会使用到定时器,一般定时器的使用方法是使用SetTimer (WNT nIDEvent, UINT nElapse, void(CALLBACK EXPORT*lpfnTimer)(HWND, UINT, UINT, DWORD)) 函数,第一个参数表不设置的定时器的标识,在定时器响应函数中做定时器超时的处理。一 般需要首先判断当前超时的定时器是否是等待需要处理的定时器,如果是,则处理,如果不 是则不处理。 如图1所示,在Microsoft Visual C++中,常用的定时器方案为,使 用 SetTimer(UINT nIDEvent, UINT nElapse,void(CALLBACK EXP0RT*lpfnTimer) (HWND,nNT,UINT,DWORD))函数设置定时器,一般指定定时器的标识,在时间响应 函数0nTimer(nNT nIDEvent)中,判断当前超时的定时器是否为设置的定时器, 即 0nTimer(UINT nIDEvent)中 nIDEvent 是否等于 SetTimer(UINT nIDEvent, UINT nElapse, void(CALLBACK EXP0RT*lpfnTimer)中的 nIDEvent。如果相同则处理。如果当前 定时器需要关闭,则调用函数KillTimerQnt nIDEvent)关闭定时器标识为nIDEvent的 定时器,所以在定时器开启时,必须记录开启的定时器标识nIDEvent,在后面关闭定时器时 用。这种做法的缺点是:所能设的定时器不能太多,否则,当一个线程的定时器过多时,需要 在定时器处理函数中做大量的判断,判断当前是哪一个定时器超时,这种判断所带来的CPU 开销在资源有限的嵌入式系统中是非常可观的,而且这种做法只能设置预先规定好定时器 标识符的定时器,对于数量随时变化,各个定时器的开启和关闭也随时变化的情况,这种做 法就非常难以实现。 常用定时器的语句举例如下: SetTimer (101,300, NULL); 设置定时器标识为101的定时器,定时时间为300毫秒。 SetTimer (200, 50, NULL); 设置定时器标识为200的定时器,定时时间为50毫秒。 本例程当前时刻开启了两个定时器,但本例程中,假设可能用到100个定时器。则 一般定时器响应函数如下: 本文档来自技高网...

【技术保护点】
一种软件多定时器动态管理方法,其特征在于,包括以下步骤:步骤1:定义数据结构TimerData,存储定时器标识TimerID和定时器超时处理方法TimerFun;步骤2:定义队列TimerQueue,存储多定时器信息,该队列的节点的数据结构形式为TimerData,每打开一个定时器,将此定时器的标识和处理方法放到队列中,队列的节点数加1,;每关闭一个定时器,就将此定时器的标识和处理方法从队列中删除,队列的节点数减1;步骤3:开启定时器,将定时器信息加入队列;步骤4:从队列中取出一个节点,判断节点中存储的定时器标识是否与当前超时的定时器标识相同,若相同则执行步骤5,否则,若不同,则执行步骤6;步骤5:节点中存储的定时器标识与当前超时的定时器标识相同,该节点对应的定时器超时,按照节点中对应的处理方法处理;步骤6:判断是否已经取出所有节点,若是,则结束操作;否则,重复步骤4。

【技术特征摘要】
1. 一种软件多定时器动态管理方法,其特征在于,包括以下步骤: 步骤1 :定义数据结构TimerData,存储定时器标识TimerlD和定时器超时处理方法 TimerFun ; 步骤2 :定义队列TimerQueue,存储多定时器信息,该队列的节点的数据结构形式为 TimerData,每打开一个定时器,将此定时器的标识和处理方法放到队列中,队列的节点数 加1,;每关闭一个定时器,就将此定时器的标识和处理方法从队列中删除,队列的节点数 减1 ; 步骤3 :开启定时器,将定时器信息加入队列; 步骤4:从队列中取出一个节点,判断节点中存储的定时器标识是否与当前超时的定 时器标识相同,若相同则执行步骤5,否则,若不同,则执行步骤6 ; 步骤5 :节点中存储的定时器标识与当前超时的定时器标识相同,该节点对应的定时 器超时,按照节点中对应的处理方法处理; 步骤6 :判断是否已经取出所有节点,若是,则结束操作;...

【专利技术属性】
技术研发人员:姜洪宇杜啸晓刘杰张孝华
申请(专利权)人:中国船舶重工集团公司第七二六研究所
类型:发明
国别省市:上海;31

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

1