vb实现高精度计时

'在Project中加入一个Module,然后在其中加入以下代码:
Option Explicit
Type LARGE_INTEGER
  lowpart As Long
  highpart As Long
End Type
Public Declare Function QueryPerformanceCounter Lib "kernel32" _
    (lpPerformanceCount As LARGE_INTEGER) As Long
Public Declare Function QueryPerformanceFrequency Lib "kernel32" _
    (lpFrequency As LARGE_INTEGER) As Long
Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal _
    uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, _
    ByVal uFlags As Long) As Long
Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
Public Declare Function GetTickCount Lib "kernel32" () As Long
Public lMSFreq As Long
Public TimerCount As Single
Public lmmCount As Single
Public lTimeID As Long
Public actTime1 As Long
Public actTime2 As Long
Public iCountStart As Single
Dim iCount As Single
'注释: timeSetEvent的回调函数
Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, _
  ByVal dw1 As Long, ByVal dw2 As Long)
  
  Form1.Text2.Text = Format$(lmmCount, "00.00")
  lmmCount = lmmCount - 0.01
  If lmmCount <= 0 Then
    iCountStart = 60
    lmmCount = 60
    TimerCount = 60
    EndCount
  End If
End Sub
Sub EndCount()
  iCount = iCountStart
  iCountStart = 0
  timeKillEvent lTimeID
  actTime2 = GetTickCount - actTime1
  With Form1
    .Command1.Enabled = True
    .Command2.Enabled = False
    .Timer1.Enabled = False
    
    .Text1 = "计数器记时" + Format$((60 - iCount), "00.00") + " " _
        + "实际经过时间" + Format$((actTime2 / 1000), "00.00")
    .Text2 = "计数器记时" + Format$((60 - lmmCount), "00.00") + " " _
        + "实际经过时间" + Format$((actTime2 / 1000), "00.00")
    .Text3 = "计数器记时" + Format$((60 - TimerCount), "00.00") + " " _
        + "实际经过时间" + Format$((actTime2 / 1000), "00.00")
  End With
End Sub

时间: 2024-11-08 18:40:16

vb实现高精度计时的相关文章

Delphi高精度计时方法

//取毫秒级时间精度(方法一): var t1,t2:int64; r1:int64; begin t1:=GetTickCount;//获取开始计数 WINDOWS API sleep(1000);{do...}//执行要计时的代码 t2:=GetTickCount;//获取结束计数值 r1:=t2-t1;//取得计时时间,Y`国4~络(}.u_%t"hV单位毫秒(ms) showmessage(inttostr(r1)); end; //取毫秒级时间精度(方法二): //use DateUt

Windows下的高精度计时和高频事件的产生

在开发 Windows 下的应用程序时,经常需要用的计时,尤其在一些对时间要求比较高的程序中,计时的精确性是很重要的,本文介绍了两种精确计时的方法,计时的精度可以达到ms级,而且可以认为它是精确的,可以在大多数情况下作为时间的基准. 用API函数::timeGetTime()获取从开机到现在经过的ms数,它的返回类型为DWORD类型,因此它的最大计时长度为2^32ms,约等于49天,::timeGetTime()是一个多媒体函数,所以它的优先级是很高的,一般可以将它看成是精确的. 用查询系统定时

C#中自定义高精度Timer定时器的实例教程_C#教程

1.背景 在C#里关于定时器的类就有3个: (1)定义在System.Windows.Forms里   (2)定义在System.Threading.Timer类里   (3)定义在System.Timers.Timer类里 Timer 用于以用户定义的事件间隔触发事件.Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理.它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程. 使用此计时器时,请使用控件的Tick事件执行轮询操作,

Windows及Linux平台下的计时函数总结

本文对Windows及Linux平台下常用的计时函数进行总结,包括精度为秒.毫秒.微秒三种精度的各种函数. 比如Window平台下特有的Windows API函数GetTickCount().timeGetTime().及QueryPerformanceCounter(), Linux平台下特有的gettimeofday()函数,以及标准的C/C++函数time()和clock().下面分别对此进行简单介绍并附上示例代码. 通用的C/C++计时函数time()和clock() time_t ti

用C++ Builder进行精确计时

虽然Win95下可视化开发工具如VC.Delphi.C++ Builder等都有专用的定时器控件Timer,而且使用很方便,可以实现一定的定时功能,但最小计时精度仅为55ms,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下的应用.不过Microsoft公司 在Win32 API函数库中已经为用户提供了一组用于高精度计时的底层函数,如果用户使用得当,计时精度可到1ms.这个计时精度.对于一般的实时系统控制完全可以满足要求.现将由C++ Builder 4.

探讨性能测试中的计时问题

在系统测试时,尤其在需要测试算法或者某些模块的运行时间时,往往需要调 用一些时间函数库(如VC中的timeGetTime等可以获取毫秒级的时间),在待测试 的模块前后分别测试时间,然后,计算前后两个时间的差值,就得到模块的运行 时间,如图 1. 性能测试中的计时问题-互联网性能问题探讨"> 图 1 一个典型的模块计时方法 但是,使用原始的计时函数直接进行时间测试 在很多复杂情况下不方便,如图 1,当在一个模块中有多个子模块需要分别计时 ,所编写的计时代码甚至比原有的代码还多,这增加了程序维

[J2SE 5.0专题][3]虚拟机

j2se 随着J2SE 5.0的发布,JavaTM HotSpot虚拟机也随之更新.新的变化包括:类数据共享.垃圾收集.服务器级机器侦测.线程优先级变化.致命错误处理.高精度计时支持等. 接下来我们大家一起来一个一个的看. [类数据共享] 可能在以往的Java版本中,大家会对Java应用程序的启动速度颇有微词,于是SUN在发布新的JRE时在这方面作了改善.这就是类数据共享. 简单的讲,类数据共享就是在JRE安装时自动,或者安装后任意时间手动,将核心的Java类打包并转换成虚拟机识别的格式,在虚拟

Flash 计时器几种实现方法

由于Flash是解释运行,限于FP的虚拟机有诸多限制,所以不要指望能和C++那样拥有可以到达毫秒级的高精度计时,甚至连微秒级别的计时也不容乐观,我们今天就来探讨一下常用的计时方法和他们的差别. 1 Event.ENTERFRAME事件         这个应该是最常见的了,几乎很多计时都用这个事件.它表示帧频,也就是说,每秒钟播放多少个帧,最新的CS5版本默认是24帧,早期的版本默认是12帧,这个是由于为了弥补和提高早期动画不流畅的问题而提高了帧率,事实也证明,人眼对于每秒30帧以上的画面切换就

视频 播放 帧率-关于视频播放的帧率控制问题

问题描述 关于视频播放的帧率控制问题 我最近在用VC++做一个多窗口视频播放软件.为了让每个窗口能够独立播放,我使用了多线程.但播放时无法按照我期望的帧率来播放. 比如,视频文件的帧率是每秒播放30帧,即每一帧的播放间隔为33ms.假设取一帧画像并播放需要耗时10ms,那我用Sleep(23)试图每隔33ms播放一帧.但实际上,线程之间的切换本身需要时间(windows下一个cpu时间片为20ms),从其它线程切换回来的时间是不固定的.我怎么能精确的控制每隔33ms播放一帧呢. 而且,即使不考虑