小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

vb延時(shí)的幾種方法

 hdzgx 2019-10-09

作者:iamlaosong

1、一般延時(shí)

一個(gè)應(yīng)用接口需要限制運(yùn)行速度,需要在循環(huán)中加個(gè)延時(shí)函數(shù),這個(gè)延時(shí)不需要多么精確,要求有個(gè)幾秒延時(shí),網(wǎng)上用的比較多的就是用Timer函數(shù)編寫(xiě),Timer是VBA自帶的函數(shù),用起來(lái)比較方便,一般程序如下:

‘延時(shí)程序
Sub delay(T As Single)
Dim time1 As Single
time1 = Timer
Do
DoEvents
Loop While Timer - time1 < T
End Sub

雖然一般用這個(gè)函數(shù)延遲用秒做單位,但1秒以?xún)?nèi)的延時(shí)也是可以的,老一點(diǎn)的機(jī)器時(shí)鐘中斷為每秒18.2次,就是說(shuō)時(shí)間間隔在0.055秒(55毫秒)左右,現(xiàn)在的機(jī)器一般都比這個(gè)高,具體多少需要測(cè)試。Timer函數(shù)根據(jù)時(shí)鐘中斷記錄當(dāng)天的時(shí)間序列值,以秒為單位,也就是從當(dāng)天0點(diǎn)開(kāi)始到當(dāng)前時(shí)間點(diǎn)上所經(jīng)歷的秒數(shù)(含小數(shù))。當(dāng)從23:59分鐘跨越到0點(diǎn)是,Timer函數(shù)的時(shí)間也重新歸零開(kāi)始計(jì)算。通過(guò)查看函數(shù)中的timer值得變化情況,可以確定時(shí)鐘中斷的間隔。例如本人的機(jī)器timer值變化如下:

56742.09
56742.11
56742.13
56742.14
56742.16
56742.16
56742.17
56742.19
56742.2
56742.22
56742.23
可以看出,時(shí)間間隔在10-20毫秒之間(精確顯示實(shí)際精度是0.015625秒,15.625毫秒)。如果時(shí)延在1秒以?xún)?nèi),精度要求不高,就可以用這個(gè)方法,如:

delay(0.25)

由于延時(shí)函數(shù)中使用了 DoEvents語(yǔ)句交出了系統(tǒng)控制權(quán),所以不會(huì)影響用戶(hù)的其它操作。

上面方法雖然簡(jiǎn)單,但是有一個(gè)致命的缺陷,就是Timer函數(shù)的時(shí)間每天都是從0開(kāi)始,如果從23:59:59開(kāi)始延時(shí)1秒以上的話,這個(gè)延時(shí)程序?qū)⒂肋h(yuǎn)執(zhí)行下去,下面的延時(shí)程序?qū)浹a(bǔ)這個(gè)缺陷:

‘延時(shí)程序
Sub delay(T As Single)
Dim time1, time2 As Single
time1 = Timer
Do
DoEvents
time2 = Timer - time1
If time2 < 0 Then time2 = time2 + 86400 ‘86400=24*3600
Loop While time2 < T
End Sub

2、精確延時(shí)

精確延時(shí)可以使用sleep函數(shù),sleep函數(shù)是Windows API函數(shù),使用前必須先聲明,然后使用,例如:

private Declare Sub Sleep Lib “kernel32” Alias “Sleep” (ByVal dwMilliseconds As Long)

。。。

sleep 1000      '延時(shí)1秒

。。。

sleep函數(shù)延時(shí)是毫秒級(jí)的,精確度比較高,但它在延時(shí)時(shí)會(huì)將程序掛起,使操作系統(tǒng)暫時(shí)無(wú)法響應(yīng)用戶(hù)操作,所以在長(zhǎng)延時(shí)的時(shí)候不適合使用它。

3、使用timeGetTime函數(shù)進(jìn)行延時(shí)
更好的辦法是使用timeGetTime函數(shù),timeGetTime函數(shù)返回的是開(kāi)機(jī)到現(xiàn)在的毫秒數(shù),可以支持1毫秒的間隔時(shí)間,而且永遠(yuǎn)增加,不存在回頭的問(wèn)題。當(dāng)然不是永遠(yuǎn)不回頭,畢竟Long型變量(雙字,4字節(jié))也是有取值范圍的,這個(gè)值在0到2^32之間。大約49.71天。

同sleep函數(shù)一樣,timeGetTime函數(shù)是Windows API函數(shù),使用前必須先聲明,即:

Private Declare Function timeGetTime Lib “winmm.dll” () As Long

延時(shí)函數(shù)和上面的一樣,只是將Timer函數(shù)換成timeGetTime:

‘精確延時(shí)程序
Sub delay(T As Long)
Dim time1 As Long
time1 = timeGetTime
Do
DoEvents
Loop While timeGetTime - time1 < T
End Sub
delay(1000) ‘ delay time for 1 ms
注意:延時(shí)時(shí)間單位是毫秒。由于延時(shí)函數(shù)中使用了 DoEvents語(yǔ)句交出了系統(tǒng)控制權(quán),所以不會(huì)影響用戶(hù)的其它操作。
這里寫(xiě)圖片描述

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多