多執行緒(MultiThread)是系統效能的強力工具,可以將原本低效率的程式以分工的方式提升數倍,對於核心開發的工作,如WinCE,多執行緒變成不可不熟悉的技術,例如處理IO,當大量資料進入系統的時候,總不能讓User看到系統發呆的難看景象吧~那誰要買我們的系統呢?

還好,微軟強大的軟體工程師幫你簡化的這方面的問題,對於多執行緒的開發,兩行指令就能處置,當然,除了「開線」外,其他還有很多必須知道的事,例如非同步執行緒的資料同步問題、各執行緒與UI之間的溝通等等,在此先稍微開場,如何開多線。

標準的執行緒開啟:

Dim mythread As New System.Threading.Thread(AddressOf myProccess)

mythread.Start()

Private Sub myProccess()

.....

End Sub

指令相當簡單,開啟一個新的執行緒去執行myProccess()副程式,當然你可以用mythread.Name為這個執行緒命名,其中執行緒也含有一些方法,如Abort,但在經驗來講WinCE中似乎並非每次都管用,所以我的建議myProccess副程式最好內寫好退出執行緒的路子,免的出現關閉程式還是沒辦法結束副執行緒的窘境。

第二個方法執行緒集區(ThreadPool),是用隨時會有大量執行緒需求,而每個執行緒執行時間短且都會釋放時,會選擇使用ThreadPool,以前想達程ThreadPool的要考慮的問題很多,NET已經簡化這些問題了,事實上當開啟一NET程式,CLR已經提供我們一顆CPU 25條的ThreadPool使用,其使用方式也很簡單:

Dim myCallback As New System.Threading.WaitCallback(AddressOf myProccess)

System.Threading.ThreadPool.QueueUserWorkItem( myCallback , Sendata)

Private Sub myProccess(Byval state as Object)

.....

End Sub

其中WaitCallback是執行緒集區執行緒執行的回呼方法,若要建立委派,您可以將回呼方法傳遞至 WaitCallback 建構函式,比較需要注意的是其副程式要含有傳入參數state,這是必要格式。之後只要使用ThreadPool.QueueUserWorkItem即可交給CLR管理我們的ThreadPool,程式非常簡潔就能提升效能,M$真的是太貼心了。

創作者介紹

傑克鼠的下午茶

傑克鼠 發表在 痞客邦 PIXNET 留言(0) 人氣()