VB Timer时钟的准确性

转载 2008年10月02日 14:16:00

Timer控件的使用 
 
VB编程过程中,通过引发Timer事件,Timer控件可以有规律地间隔一段时间执行一次代码。Interval属性是Timer控件最重要的一个属性,它以千分之一秒为单位指定Timer事件之间的间隔,理论上可以认为最少可设置为1毫秒触发一次Timer事件,另外一个重要属性是Enabled属性,它决定计时器是否开始工作。因为Timer控件响应时间的流逝,独立于用户,可以成为编程者的“好帮手”,所以在实践中很受欢迎,但编程者特别是初学者在实际使用过程中往往会感觉到“力不从心”,下面笔者将通过分析并结合自己的编程体会谈谈Timer控件使用中的几个误区。

1. 编程中过于相信Interval属性值的准确性

这是初学者易犯的错误,其实Interval属性值只是一个参考值,其准确性低,因而间隔不一定准确。Timer控件是基于Windows消息WM_TIME的时钟脉冲发生器,系统每秒生成18个时钟信号,所以即使用毫秒衡量Interval属性,间隔的实际精度不会超过1/18秒,换句话说,Timer控件能够精确设置的最短时间是65.6毫秒,如果要使时间间隔更精确,应让定时器检查系统时钟。

2. Interval属性的取值范围

Interval属性的有效值在0至65535之间,这就意味着即使最长时间间隔也只是65.6秒,比一分钟长不了多少,而且VB只有在Interval属性值大于0时,才会产生Timer事件,这是要特别注意的地方。

3. Timer控件的功能定位出错

Timer事件是周期性的,Interval属性主要是决定“多少次”而非“多久”,所以一般不用于计时,而是用做计数。笔者曾做过实验,把Interval值分别设为1000和60000,即把间隔时间分别设为一秒钟和一分钟,做成一个计时器,并把工作结果和系统标准时间比较,误差分别是6.7%和1.7%,可见定时器事件生成越频繁,响应事件所用的处理越多,越将降低系统综合性能,从而导致误差增大,这么大的误差显然失去了用做计时的意义。

4. 计数器变量的声明错误

在设计计数器时最易犯的错误是不声明变量或在区域变量中声明。将Interval属性设为1000,看看下面这个程序:

Private Sub Timer1_timer()

Dim i as integer

i=i+1

print i

End Sub

也许有读者可能想通过这段程序,能打印出1,2……n,而事实上只能打印出1,1……1来,原因在于每个时间间隔内,按顺序运行的Timer事件是彼此互不相干的,如将变量i声明为区域变量,每次程序一运行完,此变量即告完成任务,因此显示的永远是1,如在程序中将i声明为公用变量,此变量存储的值就会一直保留下来。

以上几点只是笔者在当前系统环境下的粗浅认识,可以想见,随着硬件和软件环境的不断改善,将会出现更加精确的Timer控件。

 

http://www.vbgood.com/vb.good/article-do-view-articleid-3591.html

Linux系统时间偏差的纠正 adjtimex

实际上,linux系统有两个时钟:一个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个...
  • huaxi1902
  • huaxi1902
  • 2013年04月05日 16:32
  • 2648

VB函数Time和Timer的区别

iamlaosong文 想做一个简单的延时函数,于是想到VB中Time函数和Timer函数,二者都可以做延时函数,但略有不同。 Time是时间函数,取得是当前时间,如:15:16:14,和其它日期时间...
  • iamlaosong
  • iamlaosong
  • 2016年06月15日 15:58
  • 4580

18-OC中NSDate的使用(转换时间,计算时间差,获取时间的每一部分)

NSDate的使用(转换时间,计算时间差,获取时间的每一部分)  //======== 将当前时间转换成字符串格式 =======                  //1....
  • good_sister
  • good_sister
  • 2014年12月24日 22:23
  • 2364

LPC213x RTC实时时钟准确性的测量

  • 2008年06月23日 10:39
  • 136KB
  • 下载

Timer时钟.zip

  • 2016年05月10日 15:32
  • 152KB
  • 下载

flex_使用Timer类模拟时钟;

最终效果: =>钟面类ClockFace.as package com.cen.programmingas3.simpleclock {     import flash.displa...
  • cenyebao
  • cenyebao
  • 2012年04月24日 17:16
  • 1300

cc2530-时钟1(timer1)模模式

原链接      http://blog.163.com/a_hui8/blog/static/2058303072012628105311873/ 模模式需要开启通道0的输出比较模...
  • idea1____
  • idea1____
  • 2017年03月29日 21:16
  • 80

时钟中断处理程序--do_timer()

start_kernel() --void timer_tick(void)   //为Kernel提供的体系架构无关的、系统相关的时钟中断处理函数,通常会在体系架构相关的时钟中断处理函数内调...
  • liglei
  • liglei
  • 2012年02月27日 18:21
  • 3452

Java程序显示正在运行的时钟(timer类)

(本程序主要来自Java语言程序设计(基础篇)(Y.Daniel Liang)) 类javax.swing.Timer是一个按照预定频率触发ActionEvent事件的源组件。一个Timer对象可以...
  • coder_duhg
  • coder_duhg
  • 2013年01月10日 11:54
  • 257

时钟类---swing画图、Timer、JFrame用法示例

1、运行结果 2、源代码如下: package demo.others; import java.awt.BorderLayout; import java.awt.Color; i...
  • Touch_2011
  • Touch_2011
  • 2011年11月04日 22:56
  • 5675
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB Timer时钟的准确性
举报原因:
原因补充:

(最多只允许输入30个字)