當一個程序的代碼需要花很長的時間去執行,比如處理一筆大資料庫時,這時你需要運用DoEvents函數。DoEvents函數可以臨時返回控制器給操作系統,並允許它去觸發其他的事件。
資料出處:http://msdn.microsoft.com/zh-tw/library/bd65th41(VS.80).aspx
一直苦惱著自己開發的程式Process CPU Loading太大,上網查了一下才知道原來是DoEvents這個函數造成。DoEvents並非天下無敵,用了多了會增加負載、影響效率;雖然 DoEvents 雖然會允許VB6進行其他程序作業,但是不會把CPU資源放出來,故透過呼叫 Sleep 讓 CPU 資源得以釋出,不致以 100% 來占用系統。
經小弟測試的結果果然是降低了CPU的Loading,各位可以自己測測看!
VB6:使用DoEvents
Private Sub Command1_Click() Sub Command1_Click()
For a = 1 To 100000
For b = 1 To 100000
c = c + 1
Me.Text1.Text = c
Me.Label1.Caption = c
DoEvents’將cpu交付給其它程式執行
Next
Next
End Sub
由下圖得知,DoEventsTest.exe一下子就飆到99%了
Public Declare Sub Sleep Lib "kernel32" () Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Function MyDoEvents() Function MyDoEvents(Optional ByVal dwMilliseconds As Long = 1)
MyDoEvents = DoEvents()
Sleep dwMilliseconds
End Function
名稱 說明 Thread.Sleep (Int32) 在指定的時間內暫止目前的執行緒。
受 .NET Compact Framework 支援。
Thread.Sleep (TimeSpan) 封鎖目前執行緒一段指定的時間。
VB.NET:
Public Class Form1
Private Sub Button1_Click() Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For i As Integer = 0 To 10000
Me.ListBox1.Items.Add(i.ToString)
My.Application.DoEvents()
System.Threading.Thread.Sleep(1)
Next
End Sub
End Class