admin 管理员组

文章数量: 1086019


2024年3月27日发(作者:htmlchecked属性取值)

VB高精度计时器编程

在很多场合下编程(例如工业控制、游戏)中需要比较精确的记时器,本文讨论的是在VB下

实现记时器的若干方法以及它们的精度控制问题。 在VB中最常用的是Timer控件,理论上它的

记时精度可以达到1ms(毫秒)。但实际上Timer控件的计时精度无法保证,对于1s的定时事件,

也往往会出现50ms以上的计时误差,这对于脉冲信号的采样是不能容忍的。它只适用于对于精度

要求不太高的场合。 这里介绍的是两中利用Windows API函数实现精确记时的方法。

一 高性能频率记数法

利用这种方法要使用两个

QueryPerformanceCounter。

API函数QueryPerformanceFrequency和

1、QueryPerformanceFrequency(Frequency)函数

其调用格式为:QueryPerformanceFrequency(Frequency) ,调用该函数之后将计算机内部

系统定时器的时钟频率存放于变量Frequency中,在VB语言中,可将Frequency定义为Currency

类型。所获取频率值的单位为:HZ

函数调用成功后返回非0值,如果安装的硬件不支持高精度计时器,返回0

2、QueryPerformanceCounter(Counter)函数

其调用格式为QueryPerformanceCounter(Counter),调用函数之后,将计算机内部系统定

时器的时钟计数值存放于变量Counter中,在VB语言中,可将Counter定义为Currency类型。

所获取计数值的单位为:个

函数调用成功后返回非,0值,如果安装的硬件不支持高精度计时器,返回0

分别调用两次QueryPerformanceCounter()函数,并利用两次获得的计数之差除以调用

QueryPerformanceFrequency(Frequency)函数所获取的时钟频率,就可以精确计算出两次计数

所经过的时间,单位为秒,可以精确到微秒级。

3、在调用之前需首先进行声明

Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As

Currency) As Long

Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As

Currency) As Long

Public Counter As Currency

Public Frequency As Currency

二 计时器函数法

timeSetEvent函数声明如下:

Public Declare Function timeSetEvent Lib "" (ByVal uDelay As Long, ByVal

_uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, _ByVal uFlags As

Long) As Long


本文标签: 精度 频率 函数 时钟 利用