總結:
1、並行和串行說
多線程更像並行
定時器實際是串行
2、缺點
多線程因為競搶資源,會造線程鎖死
定時器會造成UI堵塞,因為並非真正的多線程
3、多線程是“同時”執行的多任務
定時器更像是本線程插入的任務
1 軟件定時器
很多同學在工程中喜歡使用軟件定時器,因為其使用簡單,僅需設置一個時長和其OnTime事件即可使用。確實,軟件定時器在某些持續性不強的重復性工作中效率還是不錯的,但是也有着很大的缺點。
缺點1,速度:軟件定時器的精度比較低,這是由Windows不實時的特性所決定的,在XP下,如果關閉所有能關閉的進程,MFC的軟件定時器可以達到接近15ms的精度,而在Win2000下,其能達到接近10ms的精度。但是實際情況是,有些進程是不可以關閉的,比如說數據庫服務器,所以MFC的軟件定時器能夠達到的精度一般情況下在40ms左右,BCB和delphi就更差一點,大概在55ms左右。QueryPerformanceCounter倒是可以大幅提高精度,但是穩定性欠佳。
缺點2,效率:軟件定時器其本質實際上是在消息循環中處理WM_TIMER消息,而WM_TIMER消息在消息隊列中是一個低級別的消息,所以定時器並不能完全保證處理時間間隔的准確性。另外,Timer占用的是主線程的資源,看似並行實際上是串行,所以窗體的消息隊列一旦堵塞,就會造成系統假死或者運行緩慢,這對於UI來說幾乎是無法忍受的。
2 多線程
多線程技術是在控制工程中常用的技術,因為在閉環系統中有着大量的數據處理,這些處理顯然不可能放在主線程中處理,絕大多數都是在線程中使用。多線程的優點比較明顯,就是把費勁的東西扔到后台去,而且對CPU的利用率比較高。如果控制的好,多線程幾乎是沒有什么缺點的,但實際上控制的好的並不多……原因如下:
1、時間片不可控,搶CPU資源的事情~一般人說不清;
2、同步比較復雜,容易發生死鎖,3條線程同步一般就能把人折騰死。同步我比較喜歡用臨界區,原因也很簡單:因為臨界區比較簡單……
多個線程是“同時”執行的多個任務;定時可以看作是在本線程內插入的任務。
如果需要多個任務同時執行,就要用多線程;如果需要每隔一段時間做某件事就用定時。多線程相對復雜一些,占用系統資源略多一些,所以如果能不用多線程時盡量不用。
