ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > Timer函数和timeGetTime函数的区别

Timer函数和timeGetTime函数的区别

作者:绿色风 分类: 时间:2022-08-18 浏览:92
楼主
chrisfang
Timer函数是VBA中自带的函数,timeGetTime函数是Windows API函数,两个函数都可以用作计时器,但两者也有不少区别。下面分几个方面来说明:

首先来简单看一下两个函数的用法,要定制一个5秒钟的延时,可以分别使用以下两段代码:

  1. Sub S_Timer()
  2. BeginTime = Timer '记下开始的时间
  3. While Timer < BeginTime + 5 '循环等待5秒钟
  4. DoEvents '转让控制权,以便让操作系统处理其它的事件。
  5. Wend
  6. Msgbox  "时间到!"
  7. End Sub

  1. Private Declare Function timeGetTime Lib "winmm.dll" () As Long
  2. Sub S_timeGetTime()
  3. BeginTime = timeGetTime '记下开始的时间
  4. While Timer < BeginTime + 5000 '循环等待5秒钟
  5. DoEvents '转让控制权,以便让操作系统处理其它的事件。
  6. Wend
  7. Msgbox  "时间到!"
  8. End Sub


从以上两段程序代码可以看出,两个函数用法基本一致,但由于第二个函数是API函数,所以事先需要进行声明。此外,在定时时间单位上也有所不同,前者以秒为单位,后者则以毫米(ms)为单位。事实上,两者的区别还不止这些:

1,首先,Timer函数记录的数值是当天的时间序列值,也就是从当天0点开始到当前时间点上所经历的秒数。当从23:59分钟跨越到0点是,Timer函数的时间也重新归零开始计算。因此,如果在午夜时分运行使用Timer函数的程序,并且跨越0点时间的,程序很可能会出现问题。
而timeGetTime函数所记录的是从开机到目前所经历的时间,并且以毫秒为单位。所以只要机器一直开着,这个函数所能返回的数值就不断递增而不会重复。

2,虽然在第一段代码中,Timer函数的延时参数以秒为单位,但仍旧可以输入小于1的数值来表示小于1秒钟的延时时间。但需要注意的是,在Windows系统中,Timer函数的最小有效时间大约为0.055秒(随系统不同而有可能不同),也就是说小于0.055秒的时间内,Timer函数数值有可能不能及时反应变化。
而timeGetTime函数可以支持1毫米的间隔时间,因此在需要进行精确定时的场合,使用timeGetTime函数更理想。
2楼
水星钓鱼
学习了,最后一行有个错别字“1毫米”应该是“1毫秒”。
3楼
0Mouse
现在要比较的是timer和timeGetTime的准确性,第2段代码的第4行不应该再用timer,而要用timeGetTime,应该是一时手误了。
While Timer < BeginTime + 5000 '循环等待5秒钟
改成
While timeGetTime < BeginTime + 5000 '循环等待5秒钟

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap