当前位置: 网学 > 编程文档 > VB > 正文

VB高精度计时器编程的讨论

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/16
下载{$ArticleTitle}原创论文样式
C,则在每次达到定时时间后调用回调函数。
如果函数调用成功,在系统中建立了一个多媒体记时器对象,每当经过一个uDelay时间后lpFunction指定的函数都会被调用。同时函数返回一个对象标识,如果不再需要记时器则必须要使用timeKillEvent函数删除记时器对象。
由于Windows是一个多任务的操作系统,因此基于API调用的记时器的精度都会受到其它很多因素的干扰。到底这两中记时器的精度如何,我们来使用以下的程序进行验证:
设置三种记时器(Timer控件、高性能频率记数、多媒体记时器)。将它们的定时间隔设置为10毫秒,让它们不停工作直到达到一个比较长的时间(比如60秒),这样记时器的误差会被累计下来,然后同实际经过的时间相比较,就可以得到它们的精度。
下面是具体的检测程序
首先建立一个工程文件,在Form1中加入一个Timer控件,两个CommandButton控件和三个TextBox控件,然后在Form1的代码窗口中加入以下代码


Option Explicit

Private Sub Command1_Click()
    Dim lagTick1 As LARGE_INTEGER
    Dim lagTick2 As LARGE_INTEGER
    Dim lTen As Long
     
    Command2.Enabled = True
    Command1.Enabled = False
    iCountStart = 60
    lmmCount = 60
    TimerCount = 60
    actTime1 = GetTickCount
    lTimeID = timeSetEvent(10, 0, AddressOf TimeProc, 1, 1)
    Timer1.Enabled = True
     
    lTen = 10 * lMSFreq
    Call QueryPerformanceCounter(lagTick1)
    lagTick2 = lagTick1
    While iCountStart > 0
        Call QueryPerformanceCounter(lagTick2)
        ''如果时钟震动次数超过10毫秒的次数则刷新Text1的显示
        If lagTick2.lowpart - lagTick1.lowpart > lTen Then
            lagTick1 = lagTick2
            iCountStart = iCountStart - 0.01
            Text1.Text = Format$(iCountStart, "00.00")
        End If
        DoEvents
    Wend
End Sub

Private Sub Command2_Click()
    EndCount
End Sub

Private Sub Form_Load()
    Dim lim As LARGE_INTEGER
     
    Text1.Text = "60.00"
    Text2.Text = "60.00"
    Text3.Text = "60.00"
    Command1.Caption = "开始倒记时"
    Command2.Caption = "停止记时"
    Command2.Enabled = False
     
    ''获得系统板上时钟频率
    QueryPerformance
  • 下一篇资讯: 用VB开发托盘程序
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号