【原創】C#的定時器使用詳解
阿新 • • 發佈:2018-12-11
定時器是程式開發中必不可少的一員,無論是微控制器/ARM,還是上位機,理清不同的定時器之間的差異可以避免進坑~ 那麼我們就來分析分析C#中常見的三種定時器:
-
Windows.Form.Timer 首先我們使用這個系統定時器,間隔設定為200ms。
-
Threading.Timer 在button1事件裡定義了兩個執行緒定時器,非同步回撥的週期為200ms。
-
執行緒+延時 線上程中使用while(true)+sleep(200)的方式,理論上也是週期200ms。
這三種定時器的使用時比較簡單的,但是他們之間的差異在哪裡呢?我們使用richtextbox來列印在定時器裡輸出的資訊。 首先比較1和2: 在button1中啟動執行緒定時器和系統定時器,執行
敲重點:這裡想說的問題是,實際專案中使用定時器,必須要看自己在定時器裡幹什麼處理,比如同步取樣資料(注意是同步操作),那麼使用執行緒定時器可能會出問題,因為在發出取樣資料的命令時,可能(有一定的概率)正好被執行緒切換,會引發TIMEOUT異常,而使用系統定時器(方法2)就不會出問題,因為在執行定時取樣的過程中不會被其他執行緒中斷。 另外,即使提高取樣資料的執行緒的優先順序,也避免不了TIMEOUT異常。
PS:第一次發部落格,難免有疏忽之處,若有錯誤請提出,大家一起討論,不斷提高~堅持每週更原創博!