vb6實現程式延時的幾種方法

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.