暫時掛起當前任務,轉而完成佇列中等待的任務後,再返回當前任務轉移到下乙個控制項進行事件響應時,例如,窗體解除安裝,即將列印,即將csv,在對記錄集進行操作時對其他比如: 如果不用此語句,在你的迴圈中可能導致你離開視窗處理其它任務(程式)會非常的慢,而用此語句之後,會根據佇列中等待的任務狀態進行處理,盡可能不影響你程式執行中做其它的工作。
處理其它事件是什麼呢?顧名思意,就是先行處理程式裡其它正在發生的事件,當程式陷入迴圈時,整個程式都會停在處理迴圈上,當迴圈尚未被處理結束,程式便一直被停擺,在這個時間內而有其它事件發生時,vb會視而不見,為了解決這個麻煩的問題,doevents便是因此而但生。
windows系統是多工系統,多個任務可以同時執行,而實際上,這些任務是處在乙個任務佇列中的,根據cpu分配的時間片而輪流執行,因為這個迴圈時間很快,所以我們就感覺它們是在同時執行的。而vb的doevents的作用,就是暫時停止自身執行(術語叫掛起),讓系統任務佇列中的其他任務先執行。這個有什麼作用呢?當vb程式執行乙個很大的迴圈時,由於占用cpu時間太多,會使系統出現類似宕機一樣的狀態,這時如果在迴圈中用doevents語句,就可以把占用的時間讓出一部分給其他軟體,從而改善系統的執行效能。
打個通俗的比方吧:很多人排隊買火車票,輪到你了,恰巧你的手機響了,這時如果你接聽手機而又佔著售票視窗,那麼後面的人就都得等你了,而如果你讓下乙個人先買,自己接完**再買,這樣整個佇列的行進速度是不是就快些?這就是doevents的作用!
在一些不斷迴圈查詢中,因為太占用計算機,已知使用者的其他事情和操作都得不到計算機的響應。為了解決這個問題,在迴圈內加入vb doevents指令,每次迴圈到這裡,就看一下有沒有什麼緊要的事情要做。
ex:for n = 1 to 100000
me.caption = n
next
按程式的流程來說,me.caption的內容會依序由1開始顯示到100000,可是事時上程式卻停頓一會,並直接跳到顯示100000,這並不是電腦速度很快的緣故,而是vb正忙於for ... next ...迴圈,而不處理其它正在發生的事件。為了解決這個問題,doevents函式就要上場了。
for n = 1 to 100000
me.caption = n
doevents
next
還有一例:
open "stupids.txt" for input as #1
do until eof(1)
line input #1,mystr
text1.text = text1.text + mystr + vbcrlf
loop
close #1
照理說可以看到文字一段一段被放入textbox,可是結果也是停頓一段時間後,整個textbox就會突然出現所有的文字。解決方法就是加入doevents。
open "stupids.txt" for input as #1
do until eof(1)
line input #1,mystr
text1.text = text1.text + mystr + vbcrlf
doevents
loop
close #1
VB中DoEvents的注意事項
對與再大迴圈裡 加入 doevents卻是可以使應用程式響應其他程式,但是 doevents 也會很大程度上影響迴圈的速度,所以一般情況我這樣用 if getinputstate then doevents 雖然多了個判斷語句,但速度上確快了很多 比較以下 就知道了速度的差別 private dec...
VC中類似VB的DoEvents函式
在乙個程式中,如果有乙個耗時很長的程式段 比如說乙個100萬次的迴圈 程式在執行這段程式時會象死掉一樣。vb中提供doevents函式來解決這個問題。對於vc 來說,除了用多執行緒,還可以用下面的函式,起到類似於doevents的功能 bool checkmessagequeue return tr...
vb中DoEvents是什麼意思
private sub command2 click picture1.autosize true do xx rnd picture2.width yy rnd picture2.height picture2.paintpicture picture1.picture,xx,yy,picture...