Sub Main()
創新互聯公司專注為客戶提供全方位的互聯網綜合服務,包含不限于網站設計、成都網站制作、湛河網絡推廣、小程序制作、湛河網絡營銷、湛河企業策劃、湛河品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創新互聯公司為所有大學生創業者提供湛河建站搭建服務,24小時服務熱線:028-86922220,官方網址:vcdvsql.cn
Dim thr As Thread
For Pi As Integer=0 To 4 //啟用5線程
MulParams =Pi vbTab sFile vbTab dFile vbTab 1 vbTab DelN vbTab cr vbTab cg vbTab cb vbTab IndexI
GlobalParamas(pi)=MulParams .Split(vbTab)
thr=New Thread(AddressOf MyMulThreadCaller)
thr.Start() //啟動多線程進程
Application.DoEvents
Next
End Sub
多線程一般是不推薦用的,因為線程之間如果有共享資源的話會引起競爭,需要加鎖處理;而且線程間沒有時序關系,所以你在調試中可能會出現異步處理結束順序與開始處理順序不一致的情況(我在調試中已經發現該問題)。
針對你提出的這個問題,采用了多線程處理,利用的是BackgroundWorker也就是異步處理控件進行了處理。
代碼已經經過調試通過。歡迎交流,如有問題,留下QQ或其他聯系方式。
代碼如下,并附程序截圖。
‘---------------------------------------------------
Imports?System.ComponentModel?'導入異步控件命名空間
Public?Class?Form1
Private?howmany?As?Integer?=?10
Private?AnalysisNumber(0?To?howmany?-?1)?As?BackgroundWorker
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
ListBox1.Items.Clear()
creatNewBackgroundWorker()
addHandle()
startWork()
End?Sub
Private?Sub?creatNewBackgroundWorker()
For?i?As?Integer?=?0?To?AnalysisNumber.Length?-?1
AnalysisNumber(i)?=?New?BackgroundWorker
Next
End?Sub
Private?Sub?addHandle()
For?i?As?Integer?=?0?To?AnalysisNumber.Length?-?1
AddHandler?AnalysisNumber(i).DoWork,?AddressOf?AnalysisNumber_DoWork
AddHandler?AnalysisNumber(i).RunWorkerCompleted,?AddressOf?AnalysisNumber_RunWorkerCompleted
Next
End?Sub
Private?Sub?startWork()
For?i?As?Integer?=?0?To?9
Dim?temp(0?To?9)?As?Integer
For?j?As?Integer?=?1?To?10
temp(j?-?1)?=?10?*?i?+?j
Next
AnalysisNumber(i).RunWorkerAsync(temp)
Next
End?Sub
Private?Sub?AnalysisNumber_DoWork(ByVal?sender?As?Object,?ByVal?e?As?System.ComponentModel.DoWorkEventArgs)
Dim?data?As?Integer()
data?=?CType(e.Argument,?Integer())
Dim?temp?As?Integer
For?i?As?Integer?=?0?To?data.Length?-?1
temp?=?data(i)
data(i)?=?temp?*?temp
Next
e.Result?=?data
End?Sub
Private?Sub?AnalysisNumber_RunWorkerCompleted(ByVal?sender?As?Object,?ByVal?e?As?System.ComponentModel.RunWorkerCompletedEventArgs)
Dim?data?As?Integer()
data?=?CType(e.Result,?Integer())
For?i?As?Integer?=?0?To?data.Length?-?1
ListBox1.Items.Add(data(i))
Next
End?Sub
End?Class
多線程并不一定就可以縮短時間,具體要看你上面的“過程”是否調用數據庫完成。如果調用了數據庫,可以考慮用存儲過程替代“過程”。另外看看“過程”里是否反復打開和關閉了數據庫連接,如果是,這才是真正的耗時動作。如果沒調用數據庫,可以考慮使用Parallel類(.net4以后)里面的函數,使多個任務在多核CPU上并行運行,縮短時間。
可以將文件等分成兩部分,分別用兩個private讀取就是2線程。
內存解決方案:不要等程序自動GC,自己手動釋放不需要內存。
缺陷:可能會浪費時間。
Timer 是在 主線程里執行的,Thread 是在自己的線程中執行的,多核心的CPU使用線程能提高處理能力。回到你的問題,主線程如果卡死,timer就會失去響應,很正常的。請使用System.Timers.Timer類吧。請參考一下:
CPU是由操作系統管理和分配的,你的問題應該只能依靠操作系統。首先你的線程必須是內核線程,這樣操作系統才能調度你的線程,其次把線程優先級調高一點。
本文題目:vb.net線程cpu vbnet多線程編程
轉載來于:http://vcdvsql.cn/article32/hepepc.html
成都網站建設公司_創新互聯,為您提供網站改版、網站建設、外貿網站建設、云服務器、App開發、虛擬主機
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯