|
楼主 |
发表于 2019-10-7 12:51
|
显示全部楼层
b时间相关函数
━━━━━━━━━━━━━━━━━━━━━━━━━
timeGetTime只能精确到18毫秒
timer 控件只能精确到55毫秒
算法要和主频有关,无法对每个机子精确.
━━━━━━━━━━━━━━━━━━━━━━━━━
1、Timer()函数,vb自有函数,非API,无须声明,且精确到毫秒,推荐!!!
Timer 函数
返回一个 Single,代表从午夜开始到现在经过的秒数。
说明
Microsoft Windows中,Timer函数返回一秒的小数部分(毫秒)如 46.785。
示例
运用 Timer 函数来计算本代码运行所化的时间。
Sub 示例_1_040()
Dim t, i & , a
t = Timer
For i = 1 To 1000000
a = a + i
Next i
MsgBox Timer - t & "秒" ‘返回0.046875秒
End Sub
这是用的最多的一种方法,也是在VB联机手册中所推荐的。添加一个Commanon控件,再将以下代码添加到代码窗口中:
Private Sub Command2_Click()
Dim Savetime As Single
Text1 = "Timer begin"
Savetime = Timer ‘记下开始的时间
While Timer < Savetime + 5 ‘循环等待
DoEvents ‘转让控制权,以便让处理其它的事件。
Wend
Text1 = "Timer ok"
End Sub
━━━━━━━━━━━━━━━━━━━━━━━━━
2、timeGetTime
Declare Function timeGetTime Lib "winmm.dll" Alias "timeGetTime" () As Long
Dim lngtmp As Long
Do While '这里写结束条件
lngtmp = timeGetTime
While timeGetTime - lngtmp < x ' 这里的x是你需要精确的数,如1就是1/1000=0.001秒
DoEvents
Wend
'你要执行的代码
Loop
━━━━━━━━━━━━━━━━━━━━━━━━━
3、GetTickCount
Dim T0 As Long
Dim T1 As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_Click()
T0 = GetTickCount
End Sub
Private Sub Form_DblClick()
T1 = GetTickCount
MsgBox (T1 - T0)
End Sub
毫秒级的哦!(其他答案都不可以的)
━━━━━━━━━━━━━━━━━━━━━━━━━
4. Sleep
新建一个工程,添加一个TextBox控件和一个Commanon控件,再将以下代码复制到代码窗口:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Text1 = "sleep begin"
Sleep 3000
Text1 = "sleep end"
End Sub
━━━━━━━━━━━━━━━━━━━━━━━━━
示例
━━━━━━━━━━━━━━━━━━━━━━━━━
vb中返回当前系统毫秒数的函数是Timer。
'第一次操作
t1 = Timer
'第二次操作
For i = 1 To 1000000
x = x + i
Next
t2 = Timer
Debug.Print Int((t2 - t1) * 1000) '时间差,精确到毫秒
━━━━━━━━━━━━━━━━━━━━━━━━━
VB 延时函数
Private Sub WaitTime(t As Single)
Dim starttime As Single
starttime = Second(Now)
Do Until (60 + Second(Now) - starttime) Mod 60 > t
Loop
End Sub
━━━━━━━━━━━━━━━━━━━━━━━━━ |
|