| 
 | 
 
写程序的时候,尤其是算法类的,需要比对算法执行时间。这个代码集合了一些高手的经验 
 
 
 
- ' 大整数结构体
 
 - Private Type LARGE_INTEGER
 
 -     LowPart As Long
 
 -     HighPart As Long
 
 - End Type
 
  
- ' 获取时间计数器计数值
 
 - Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As LARGE_INTEGER) As Long
 
  
- ' 获取震动频率:一个大整数
 
 - Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long
 
  
- ' 用于将大整数的字节复制到Currency类型,完成转换的工作
 
 - Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
 
  
- ' 初始时间
 
 - Private initTime As LARGE_INTEGER
 
  
- ' 每秒震动次数
 
 - Private freqCount As LARGE_INTEGER
 
  
- ' 采样时振动器震动计数值
 
 - Private logTime As LARGE_INTEGER
 
  
- ' 每秒震动次数的Currency类型数据
 
 - Private fFreq As Currency
 
  
- ' 将一个长整型转换成高精度型数据
 
 - Private Function LargeIntToCurrency(liInput As LARGE_INTEGER) As Currency
 
 -     CopyMemory LargeIntToCurrency, liInput, LenB(liInput)
 
 -     LargeIntToCurrency = LargeIntToCurrency * 10000
 
 - End Function
 
  
- ' 类初始化
 
 - Private Sub Class_Initialize()
 
 -     ' 获取振荡器的震荡频率
 
 -     If QueryPerformanceFrequency(freqCount) > 0 Then
 
 -         If QueryPerformanceCounter(initTime) > 0 Then
 
 -         Else
 
 -             Err.Raise 11, , "记录震荡次数出错!"
 
 -         End If
 
 -     Else
 
 -         Err.Raise 11, , "读取震荡频率出错!"
 
 -     End If
 
 -     fFreq = LargeIntToCurrency(freqCount)
 
 - End Sub
 
  
- ' 重置计数器
 
 - Public Sub ReInit()
 
 -     Call Class_Initialize
 
 - End Sub
 
  
- ' 重置计数器,并返回从上次重置计数器开始共流失的秒数。
 
 - Public Function ReInitGet() As Currency
 
 -     Dim cuStart As Currency
 
 -     Dim cuEnd As Currency
 
 -     QueryPerformanceCounter logTime
 
 -     cuStart = LargeIntToCurrency(initTime)
 
 -     cuEnd = LargeIntToCurrency(logTime)
 
 -     ReInitGet = (cuEnd - cuStart) / fFreq
 
 -     QueryPerformanceCounter initTime
 
 - End Function
 
  
- ' 返回从上次重置计数器开始共流失的秒数,但不重置计数器
 
 - Public Function SmoothGet() As Currency
 
 -     Dim cuStart As Currency
 
 -     Dim cuEnd As Currency
 
 -     QueryPerformanceCounter logTime
 
 -     cuStart = LargeIntToCurrency(initTime)
 
 -     cuEnd = LargeIntToCurrency(logTime)
 
 -     SmoothGet = (cuEnd - cuStart) / fFreq
 
 - End Function
 
  复制代码 
 
 |   
 
 
 
 |