首页> 中国专利> Windows平台下毫秒级异步定时器的实现方法

Windows平台下毫秒级异步定时器的实现方法

摘要

本发明公开了一种Windows平台下毫秒级异步定时器的实现方法。本发明通过计算CPU主频的方法来实现定时器,将所需要的定时转化为CPU时钟周期(主频的倒数)的倍数。当CPU不断运行,其时钟周期不断增加直至到达所设置的值,这样就超时了,此时采取相应的动作;而CPU时钟周期是纳秒级的,因此实现了实现毫秒级定时器。本发明解决了用户模式下实现毫秒级且对秒级进行精确控制异步定时器的问题,并将之用于自动售票机系统中。

著录项

  • 公开/公告号CN105653286A

    专利类型发明专利

  • 公开/公告日2016-06-08

    原文格式PDF

  • 申请/专利权人 南京理工大学;

    申请/专利号CN201511028405.7

  • 申请日2015-12-31

  • 分类号G06F9/44;

  • 代理机构南京理工大学专利中心;

  • 代理人朱显国

  • 地址 210094 江苏省南京市孝陵卫200号

  • 入库时间 2023-12-18 15:42:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-01-18

    授权

    授权

  • 2016-07-06

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20151231

    实质审查的生效

  • 2016-06-08

    公开

    公开

说明书

技术领域

本发明属于自动售票机系统领域,具体是一种Windows平台下毫秒级异步定时器 的实现方法。

背景技术

自动售票机是地铁自动售检票系统中最复杂的专用设备,技术涉及机械、电子、软 件、控制、金融、射频等多个方面。Windows设计之初并不是以实时系统为目标的,所以 Windows系统的时间精度一直不高,实际最小单位是15ms左右,导致的结果就是所有 Windows的时间、线程相关的操作都无法以1ms来实现精确控制。自动售票机系统对实时性 要求比较高,因此需要一种高精度的定时器来实现定时服务。自动售票机系统与相关设备 (如硬币机)之间的通信都有一定的超时值来保证相应的通信质量,这些值通常都是毫秒 级。高精度的异步定时器提高了系统的效率和准确性。

发明内容

本发明的目的在于提供一种有效的windows平台下毫秒级异步定时器的实现方 法,它主要基于CPU时钟周期,用于实现毫秒级且对秒级进行精确控制,并将之用于自动售 票机系统中,从而弥补Windows平台下定时不正确、同步方式定时所带来的实时性差等缺 陷。

实现本发明目的的技术解决方案为:一种Windows平台下毫秒级异步定时器的实 现方法,具体方法如下:

创建定时器管理类和退出事件;

同时开启定时器巡检线程和秒变化巡检线程;

定时器巡检线程检查退出信号,如果没有退出信号就调用定时器管理类的 invokeIfTimeout方法,该方法首先得到当前时间的时钟周期数,然后遍历在其中注册的定 时器,如果定时器设置的超时值小于当前值,则说明已经超时,如果需要重置,则重新以定 时间隔(M_INTERVAL)设置超时值,接着调用其中的invoke方法开启另一个线程执行定时器 中的任务m_ElapsedCallback;最后清理完成任务的定时器;如此循环往复,直至收到退出 信号;

秒变化巡检线程检查退出信号,如果没有退出信号就重复不断地检查系统时间,若秒 变化,则发送通知以更新时钟;首先,获得系统的时间,检查系统当前时间的毫秒数,如果该 毫秒数小于n,则说明发生了秒变化;如果这一秒中没有调用过回调函数,就设置标志说明 该秒的回调已经完成,然后调用其完成任务;否则设置一个标志说明该秒的回调没有完成; 如果该值不小于n则让线程睡眠

tms再进行检查;如此不断重复直至收到退出信号。

本发明与现有技术相比,其显著优点为:(1)实现了精确毫秒级定时,满足了不同 的任务有不同的定时的要求,利用CPU主频的时钟周期来计算时间,可靠性高且准确,误差 小,满足系统实时性要求。(2)实现异步定时器,改变了目前windows平台下同步定时的方 式,降低了定时误差,适应多任务、多线程的环境。(3)实现了用户模式下的定时方法,以往 定时器的使用都是利用内核中的定时方法,其可控性比较差,现在只是利用系统中的系统 调用来获取系统滴答数,无需调用其它内核函数。

附图说明

图1是本发明Windows平台下毫秒级异步定时器的实现Timer类图。

图2是本发明Windows平台下毫秒级异步定时器的实现Timers类图。

图3是本发明Windows平台下毫秒级异步定时器的流程图。

具体实施方式

本发明通过计算CPU主频的方法来实现定时器,将所需要的定时转化为CPU时钟周 期(主频的倒数)的倍数。当CPU不断运行,其时钟周期不断增加直至到达所设置的值,这样 就超时了,此时采取相应的动作;而CPU时钟周期是纳秒级的,因此实现了实现毫秒级定时 器。

本发明Windows平台下毫秒级异步定时器实现方法,包含

1.1实现定时器:

n每个定时器类对象包含:定时器ID、定时间隔、生命作用时间、定时回调函数、超时 值,自动重置标志,回调标志和线程信息。

n每个定时器都包含相应的方法。这些方法设置超时值,在一个线程中进行回调, 终止回调的执行,结束线程。定时器可分为周期性和一次性的。

1.2实现定时器管理类:

n定时器管理类用来管理定时器。它可以添加和删除定时器。该类中有一个容器-链 表,链表中元素是一个定时器对象。利用C++标准库中list实现添加和删除定时器。

n该类还实现清除容器、引发定时时间已到定时器的回调、检查并清理已结束回 调的句柄和销毁所有的定时器。

1.3时间服务类:

n时间服务类拥有一个定时器管理类指针,所有的定时任务都委托给定时器管理类来 实现;

定时器还实现了每过一秒就能发生回调。

下面结合附图对本发明作进一步详细描述。

图1说明了定时器类,定时器类对象包含:定时器ID(M_ID)、定时间隔(M_ INTERVAL)、生命作用时间(M_CBMAXLIFETIME)、定时回调函数(M_ELAPSEDCALLBACK)、超时 值(M_TICKOFTIMEOUT),自动重置标志(M_AUTOREST),回调标志(M_ENABLED)和线程信息(M_ THREADINFO)。其还有在一个线程中进行回调(invoke),终止回调的执行(abort)等等方法。 定时器可分为周期性和一次性的。图2说明了定时器管理类,其用来管理定时器。它可以添 加(ADD)和删除(REMOVE)定时器。该类中有一个链表(M_TIMERS),链表中元素是一个定时器 对象。利用C++标准库中list实现添加和删除定时器。其它一些方法用于销毁资源。

图3给出了本发明的工作流程图。首先,创建定时器管理类和退出事件。开启定时 器巡检线程和秒变化巡检线程。定时器巡检线程检查退出信号,如果没有退出信号就调用 定时器管理类的invokeIfTimeout方法,该方法首先得到当前时间的时钟周期数,然后遍历 在其中注册的定时器,如果发现有定时器设置的超时值小于当前值则说明已经超时,如果 需要重置,则重新以定时间隔(M_INTERVAL)设置超时值,接着就调用其中的invoke方法开 启另一个线程执行定时器中的任务m_ElapsedCallback。而此时并不等待任务执行完后才 继续执行当前工作,这就是异步定时器。最后清理完成任务的定时器。如此循环往复,直至 收到退出信号。

秒变化巡检线程检查退出信号,如果没有退出信号就重复不断地检查系统时间, 若秒变化,则发送通知以更新时钟。首先,获得系统的时间,检查系统时间的毫秒数,如果发 现其小于50,这说明发生了秒变化。如果这一秒中没有调用过回调函数,设置标志说明该秒 的回调已经完成,并调用其完成任务。否则设置一个标志说明该秒的回调没有完成。如果该 值不小于50则让线程睡眠10ms再检查。如此不断重复直至收到退出信号。当然,时间服务类 中有两个标志表示是否可以执行定时器和秒变化的任务。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号