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