VB6在開發發貼機時,提交資料要用到延時程式,讓程延時和等待.
從網上找了三種方法,三種方法以最後一種最好用.第一種如果不DOEVENTS的話,會使人感覺程式無反應一樣
有以下方法:
1.使用Windows API函數Sleep
新
建一個工程,添加一個TextBox控制項和一個CommandButton控制項,再將以下代碼複製到代碼視窗
'聲明:
Private
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private
Sub Command1_Click()
Text1.text = "開始時延3秒"
Sleep 3000
Text1.text
= "時延3秒結束"
End Sub
2.使用Timer()函數
這是用的最多的一種方法,也是在VB
線上手冊中所推薦的。添加一個CommandButton控制項,再將以下代碼添加到代碼視窗中:
Private Sub
Command2_Click()
Dim Savetime As Single
Text1 = "Timer begin"
Savetime
= Timer '記下開始的時間
While Timer < Savetime + 5 '迴圈等待
DoEvents
'轉讓控制權,以便讓作業系統處理其它的事件。 -----這個的功能差不多等於掛起,並且等待系統回應後把控制
權返還
Wend
Text1 = "Timer ok"
End Sub
這種方法雖然也很簡單,但卻
有有一個致命缺陷,那就是Timer函數返回的是從午夜開始到現在經過的秒數。所以Timer返回的最大值也只是60*60*24-1秒,如果從一天的
23:59:58秒開始計時等待5秒,那麼程式會永遠地迴圈下去。要進行改良,就要加上判斷是否又開始了新的一天,那豈不是太麻煩.
//
上面一段是網上找的資料,其實可以不用timer函數,而是使用timer控制項或者second函數,但是second函數如果是在第55秒後延長5秒的
話,也需要做到上面說的新的一分鐘的判斷,那也麻煩.當然,你也可以修改系統的時間,把他改在55秒前,總之還是麻煩。因此可以考慮用timer函數.創
建一個flag(標誌),初始化flag為0,用timer每秒flag+1,當flag2=flag1+5的時候清零,根據條件判斷執行下一命令 和
是否繼續執行迴圈。大概的代碼是:
dim flag1,flag2 as integer'該定義應該放在最最最上面,flag是全域
'
這部分可以放在command按下按扭的時候,或者onload
flag1=0
flag2=flag1+5
'timer1
部分
if flag2 <> flag1 then
flag1=flag1+1
print flag1
exit sub
else
'flag1=0
timer1.enabled=false
'先清零再做其他事情,包括中斷
timer1.enabled=false等
end if
(代碼可用)
上面的代碼甚至可以一秒判斷一次執行一個
不同的命令
if flag2 <> flag1 then
' new part
select case
flag1
case 1: 'Express 1 while the first second
case 2: 'Express 2
while the second second
case 3: 'Express 3 while the third second
case
4: 'Express 4 while the fourth second
....
end select
flag1=flag1+1
exit sub
else
'flag1=0
timer1.enabled=false
'
先清零再做其他事情,包括中斷 timer1.enabled=false等
end if
3.使用
Windows API函數timeGetTime()
timeGetTime函數沒有參數,傳回值是從開機到現在所經曆的毫秒數,這個毫秒數是
非周期性遞增的,所以不會出現Timer()函數出現的問題,而且這種方法的精確性高於上一種方法。添加一個CommandButton控制項,再將以下代
碼添加到代碼視窗中:
'聲明
Private Declare Function timeGetTime Lib
"winmm.dll" () As Long
Private Sub Command3_Click()
Dim
Savetime As Double
Text1 = "timeGetTime begin"
Savetime =
timeGetTime '記下開始時的時間
While timeGetTime < Savetime + 5000 '迴圈等待
DoEvents
'轉讓控制權,以便讓作業系統處理其它的事件。
Wend
Text1 = "timeGetTime end"
End Sub