分享

利用 timeGetTime 更精准地计算时间差

 nxhujiee 2017-07-25
 利用 timeGetTime 更精准地计算时间差。

我想每 0.005 秒做某一件工作, 所以撰写了以下程序:
Dim tm1 As Single
Do
tm1 = Timer
While Timer - tm1 < 0.005 ' 等于 0.005 秒
DoEvents
Wend
...
做某一件工作
Loop

但实际上, 在 While 循环里面, Timer 函数几乎每次都得到相同的时间,只有
大约隔了 0.05秒才会得到不同的时间, 也就是说 Timer 的准确性只有 0.05 秒,
但我希望进行的工作却是每 0.005 秒一次, 该怎么办呢?
可以改用 Windows API 的 timeGetTime 函数, 此一函数会传回 Windows 开机以
来所经过的时间,时间单位是 1 / 1000 秒, 举例来说, 开机经过 2 分钟, 则传
回值等于 2 * 60 * 1000, timeGetTime 的优点是时间可以精确到 1 / 1000 秒, 所以
可以用来解决上述的问题,细节如下:
1. API 的声明:
Private Declare Function timeGetTime Lib "winmm.dll" Alias "timeGetTime"
() As Long
注:如果以上的声明放在「一般模块」底下, 应将 Declare 之前的 Private
留字去掉。

2. 程序范例:
Dim tm1 As Long
Do
tm1 = timeGetTime
While timeGetTime - tm1 < 5 ' 等于 5/1000 = 0.005 秒
DoEvents
Wend
...
做某一件工作
Loop

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多