利用Windows定时器队列开发高精度定时器控件.pdf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 Windows 定时器 队列 开发 高精度 控件
- 资源描述:
-
ww. kululu.con
《自动化与似器仪表》2015年3期(总第185期)
利用 Windows定时器队列开发高精度定时器控件
杨海娟
(兰州职业技术学院电子与信息工程系兰州,730070)
摘要:利用 Windows系统提供的定时器队列,实现了一个高精度 Activex定时器控件,突破了一些可视化开发工具自
带的定时器控件的限制,克服了一些 Windows API函数实现的传统的定时方法的缺陷,可以实现定时间隔最长为2147483647
毫秒(约为24.855天)的精确定时,为工业控制、数据采集等应用软件的开发提供了极大的方便。
关键词:定时器;定时器队列; Active)Ⅹ控件
D?编码:10.14016j.cnki,1001-9227.2015.03.057
Abstract: A number of methods can be used to develop software timer in Windows. Some of them are analyzed in this paper
nd based on the analysis, a timer-queue based Activex timer control is developed. Its timing interval can be as long as
2147483647m, and its resolution is very high as well. The control can be conveniently used by programmers in procedure-controk
or data-collection applications
Key words: Timer; Timer queue; Active X control
中图分类号:TP311
文献标识码:B
文章编号:1001-9227(2015)03-0057-03
引言
mance Counter0。 Gettickcount0和 time Time都是获取自系统
在软件开发过程中,定时器是一种常用的设计元素。Win-启动以来流逝的秒数,结合循环,获取两次调用之间的差值即
平台上的定时器编程有多种实现方式,比较常用的有:可实现定时。 Queryperformancefrequency0和 Query Performance
Set'timert0实现的定时器、 timesetevent0函数实现的多媒体定时 Counter(配合使用, Queryperformancef'requency0函数获取机器
器、可等待定时器( Waitable timer)、相关的 Windows API内部定时器的时钟频率,在需要定时的事件发生之前和发生之
函数结合循环采用轮询机制实现的定时功能,以及定时器队列后分别调用 Query Performancecountero函数,利用两次获得的计
定时器( Timer- queue timer)等。
数之差,结合已获取的时钟频率,即可计算出两件事件之间经
Set'timert0函数可以为 Windows 7程序分配一个定时器,该定历的精确的时间长度,严格地米说,在 Windows平台上,采用
时器利用WM_ TMIER消息映射来进行简单的时间控制,定时这两个函数实现的定时最为精确的,但由于需要结合循环进行
精度约为55ms。由于 Windows系统采用多线程的抢占式多任务轮询,因此在定时过程中需要不停地消耗CPU资源,是一种
工作方式,而WM_ TIMER消息优先级较低,因此这种定时“忙等”机制。
方法适用于对定时精度要求不高的情况。 Delphi、VB等快速原
可等待定时器是 Windows中的一种内核对象,因此该定时
型化开发工具中自带的定时器控件,基本上都是采用该方法实器的使用模式与其它内核对象的使用方式基本是一致的。Cre
现的。除了定时精度低以外,VB的定时器控件有更大的缺 ate Waitabletimer0函数用于创建可等待定时器对象, Setwait
陷,其定时间隔不能超过65535ms,更限制了这样的定时器控 abletimer(0函数设置等待的时长, Wait Forsingle Object数等
件的应用。
待该定时器对象有信号,如定时器对象有信号,则表明指定时
与 Set Timer0函数实现的定时器相比, timesetevent0实现的长的时间已经流逝。作为一种内核对象,阿等待定时器可以跨
多媒体定时器,可以实现多分辨率的定时,分辨率越高,定时线程、进程使用,但在实际应用中,一般多用于线程同步或进
精度越高,但系统所需的开销越重。该函数可以实现只进行一程同步,而用于周期性定时的用法,并不多见。
次性的定时事件出发,也可以进行常规的周期性定时,因此该
定时器队列定时器是微软在 Windows.2000及后续的Win
方法的应用比较灵活,但出于种种原因,微软在MSDN中明确dows操作系统中推荐使用的定时器,它支持多种工作模式,创
指出,该函数已被摒弃,在应用程序开发过程中不应再使用该建定时器队列定时器时,需指定一个回调函数,当定时时间到
方法进行定时。
达时,自动调用回调函数实现周期性定时。顾名思义,这种定
Windows中很多与时间相关的API函数可以与循环结合,时器采用队列机制进行管理,是一种轻型对象,而且系统对回
采用轮询机制实现定时功能。典型的API函数有 Get Tickcount调函数采用线程池机制进行管理、调度,因此系统开销较小。
0、 timeget'time0、 Queryperformancefrequency0和 Query Perfor
从以上分析可知,使用定时器队列实现高精度定时具有明
显的优越性,因此在 Windows2000及后续的 Windows操作系统
收稿日期:2015-01-20
中用来替代 time Setevent0多媒体定时器。为了方便使用,本文
作者简介:杨海娟(1976-),女,甘肃正宁人,硕士,副教授
计算机应用教研室主任,主要从事计算机应用,计算机教学,物联网
使用 Visual Basic6.0,利用定时器队列开发了一个 Activex定时
等工作。
器控件,该控件拥有定时器队列定时器的一切优势,可以实现
57
展开阅读全文
文档分享网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。



链接地址:https://www.wdfxw.net/doc96852572.htm