VB6在開發(fā)發(fā)貼機(jī)時,提交數(shù)據(jù)要用到延時程序,讓程延時和等待.
從網(wǎng)上找了三種方法,三種方法以最后一種最好用.第一種如果不DOEVENTS的話,會使人感覺程序無反應(yīng)一樣
有以下方法:
1.使用Windows API函數(shù)Sleep
新
建一個工程,添加一個TextBox控件和一個CommandButton控件,再將以下代碼復(fù)制到代碼窗口
'聲明:
Private
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private
Sub Command1_Click()
Text1.text = "開始時延3秒"
Sleep 3000
Text1.text
= "時延3秒結(jié)束"
End Sub
2.使用Timer()函數(shù)
這是用的最多的一種方法,也是在VB
聯(lián)機(jī)手冊中所推薦的。添加一個CommandButton控件,再將以下代碼添加到代碼窗口中:
Private Sub
Command2_Click()
Dim Savetime As Single
Text1 = "Timer begin"
Savetime
= Timer '記下開始的時間
While Timer < Savetime + 5 '循環(huán)等待
DoEvents
'轉(zhuǎn)讓控制權(quán),以便讓操作系統(tǒng)處理其它的事件。 -----這個的功能差不多等于掛起,并且等待系統(tǒng)回應(yīng)后把控制
權(quán)返還
Wend
Text1 = "Timer ok"
End Sub
這種方法雖然也很簡單,但卻
有有一個致命缺陷,那就是Timer函數(shù)返回的是從午夜開始到現(xiàn)在經(jīng)過的秒數(shù)。所以Timer返回的最大值也只是60*60*24-1秒,如果從一天的
23:59:58秒開始計時等待5秒,那么程序會永遠(yuǎn)地循環(huán)下去。要進(jìn)行改良,就要加上判斷是否又開始了新的一天,那豈不是太麻煩.
//
上面一段是網(wǎng)上找的資料,其實可以不用timer函數(shù),而是使用timer控件或者second函數(shù),但是second函數(shù)如果是在第55秒后延長5秒的
話,也需要做到上面說的新的一分鐘的判斷,那也麻煩.當(dāng)然,你也可以修改系統(tǒng)的時間,把他改在55秒前,總之還是麻煩。因此可以考慮用timer函數(shù).創(chuàng)
建一個flag(標(biāo)志),初始化flag為0,用timer每秒flag+1,當(dāng)flag2=flag1+5的時候清零,根據(jù)條件判斷執(zhí)行下一命令 和
是否繼續(xù)執(zhí)行循環(huán)。大概的代碼是:
dim flag1,flag2 as integer'該定義應(yīng)該放在最最最上面,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
(代碼可用)
上面的代碼甚至可以一秒判斷一次執(zhí)行一個
不同的命令
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函數(shù)timeGetTime()
timeGetTime函數(shù)沒有參數(shù),返回值是從開機(jī)到現(xiàn)在所經(jīng)歷的毫秒數(shù),這個毫秒數(shù)是
非周期性遞增的,所以不會出現(xiàn)Timer()函數(shù)出現(xiàn)的問題,而且這種方法的精確性高于上一種方法。添加一個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 '循環(huán)等待
DoEvents
'轉(zhuǎn)讓控制權(quán),以便讓操作系統(tǒng)處理其它的事件。
Wend
Text1 = "timeGetTime end"
End Sub