這裏僅提供一個方案,固然會有比本方案更好的,歡迎提供。this
在vb.net實現週期調度的問題時(就是間隔固定的時間作什麼事情),咱們最早想到的必定是(反正我是)利用timer(定時器)來作這個計時的工做。採用多少ms來調用計時器的方式進行週期性的作一些事情。可是,當我用ms
級的週期調度的時候,會存在很大的偏差。那麼不得不想一個其餘方案。.net
Private Declare Ansi Function timeGetTime Lib "winmm.dll" () As Long Private BaseTime As Long Private SaveTime As Long Private Run_Flag As Boolean Private Cycle_Count As Long Private Sub b_start_Click(sender As Object, e As EventArgs) Handles b_start.Click 'this is init var and base station BaseInit() start_fun() While Run_Flag While timeGetTime < SaveTime + 1 Application.DoEvents() End While SaveTime = timeGetTime 'save time Cycle_Count = Cycle_Count + 1 '1ms If Cycle_Count Mod (5) Then Run_5ms() End If 'if you need ,you can add 10ms,50ms,100ms,1000ms etc. End While End Sub Sub BaseInit() Run_Flag = False BaseTime = 0 SaveTime = 0 Cycle_Count = 0 show_task.Text = 0 End Sub Sub start_fun() BaseTime = timeGetTime SaveTime = BaseTime Run_Flag = True End Sub Sub Run_5ms() 'do what you want to do. show_task.Text += 1 End Sub Private Sub b_stop_Click(sender As Object, e As EventArgs) Handles b_stop.Click BaseInit() End Sub
在計時方面,若是對時間精度不是很大要求的話,其實能夠使用100ms
級別的timer,或者s
級別的timer,這樣大概偏差在30s會誤差一個2s左右的樣子。對於有嚴格時間要求的,仍是不要使用timer這個。code