background image

VC

 

中基于

Windows 的精确定时

    在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕

 

上的进度条,上位 机定时向下位机发送命令和传送数据等。特别是在对控制性能要求较高的实
时控制系统和数据采集系统中,就更需要精确定时操作。
  

众所周知,

Windows 是基于消息机制的系统,任何事件的执行都是通过发送和接收消

息来完成的。

 这样就带来了一些问题,如一旦计算机的 CPU 被某个进程占用,或系统资源

紧张时,发送到消息队列

 中的消息就暂时被挂起,得不到实时处理。因此,不能简单地通

Windows 消息引发一个对定时要求 严格的事件。另外,由于在 Windows 中已经封装了计

算机底层硬件的访问,所以,要想通过直接利用

 访问硬件来完成精确定时,也比较困难。

所以在实际应用时,应针对具体定时精度的要求,采取相适

 应的定时方法。

  

VC 中提供了很多关于时间操作的函数,利用它们控制程序能够精确地完成定时和计时操

 

作。本文详细介绍了

VC 中基于 Windows 的精确定时的七种方式,如下图所示:

 

 

图一 图像描述

  

方式一:

VC 中的 WM_TIMER 消息映射能进行简单的时间控制。首先调用函数

SetTimer()

 

设置定时 间隔,如

SetTimer(0,200,NULL)即为设置 200ms 的时间间隔。然后在

 

应用程序中增加定时响应函数

OnTimer(),并在该函数中添加响应的处理语句,用来完成到达

 

定时时间的操作。这种定时方法非常 简单,可以实现一定的定时功能,但其定时功能如同
Sleep()

 

函数的延时功能一样,精度非常低,最小 计时精度仅为

30ms,CPU 占用低,且定时

 

器消息在多任务操作系统中的优先级很低,不能得到及时响 应,往往不能满足实时控制环境下
的应用。只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况。如示例工程中的
Timer1