在vb中要做到微秒级的计时,用api:QueryPerformanceFrequency和QueryPerformanceCounter..
不过用这种方法有时会罢工。。。自己按实际情况决定吧。。。。用这个,你可以改一下,试试看吧!
Option Explicit
'
声明函数
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As LARGE_INTEGER) As Long
'
声明结构
Private Type LARGE_INTEGER
LowPart As Long
HighPart As Long
End Type
Private Sub Form_Load()
Dim PFrequency As LARGE_INTEGER
'
获得高精度运行计数器的频率
QueryPerformanceFrequency PFrequency
'
延时 1000微妙
SleepEx (PFrequency.LowPart / 1000000) * 1000, 0
End Sub
' 实现延时功能
Private Function SleepEx(ByVal LowPart As Long, HighPart As Long) As Long
Dim Interval As LARGE_INTEGER
Dim Privious As LARGE_INTEGER
Dim Current As LARGE_INTEGER
'
获得高精度运行计数器的数值
Call QueryPerformanceCounter(Privious)
Current = Privious
Interval.LowPart = LowPart
Interval.HighPart = HighPart
'
通过比较两次计数器的数值的差实现精确延时
Do While (Abs((Current.HighPart * 2 ^ 16) + Current.LowPart) _
- Abs(Privious.HighPart * 2 ^ 16) + Privious.LowPart) < _
(Abs(Interval.HighPart * 2 ^ 16) + Interval.LowPart)
Call QueryPerformanceCounter(Current)
Loop
SleepEx = 0
End Function