版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第7章多線程計算機編程,7.1線程生成7.2個或更多線程互斥鎖7.3生產(chǎn)者線程與消費者線程的同步,如果一個程序中有多個任務需要同時完成,則可以使用多線程。您可以在Windows操作系統(tǒng)中運行多個程序,運行的程序稱為進程。一個進程可以有多個線程。每個線程依次占用CPU執(zhí)行時間。Windows操作系統(tǒng)將時間劃分為時間片。一個線程在一個時間片耗盡后,執(zhí)行暫停操作系統(tǒng)牙齒線程、喚醒另一個線程、使用下一個時間片、暫停、喚醒、暫停和重新喚醒操作系統(tǒng)線程等任務。Windows操作系統(tǒng)上有很多這樣的例子。例如,當復制檔案時,一方進行磁盤的讀寫操作,同時從一張紙不停地從一個文件夾漂到另一個文件夾的牙齒浮動動作實
2、際上是動畫,兩個動作就像徐璐在另一個線程上完成的一樣,兩個動作牙齒同時進行。另一個例子是Word程序的拼寫檢查也是在其他線程中完成的。(阿爾伯特愛因斯坦、美國電視電視劇(Northern Exposure,Northern Exposure),每個進程都有一個或多個線程(主線程),進程是自動創(chuàng)建的,每個進程可以創(chuàng)建多個線程。Process類,Process類Process類是System .位于Diagnostics命名空間中,用于完成系統(tǒng)進程的管理任務。您可以在本地計算機上啟動和停止進程,或查詢進程以獲取特定類型的信息。無法在遠程系統(tǒng)上啟動和停止進程,但可以查看有關進程的相關信息。操作過程時
3、,必須首先創(chuàng)建Process類的實例,設置對象成員的StartInfo屬性,最后調(diào)用其Start方法。是。啟動、停止和觀察進程,1 .創(chuàng)建名為ProcessExample的新Windows應用程序。2.將流程組件從工具箱拖放到設計表格。3.添加命名空間:using System。診斷;診斷。Using System。Threading4.啟動記事本、停止記事本、查看所有流程按鈕,然后添加Click事件代碼private void button start _ Click(object sender,ever)/notepad . exe流程process1。啟動Start(),創(chuàng)建privat
4、e void button stop _ click(object sender,eventargse)/新Process組件的數(shù)組,然后創(chuàng)建指定的進程名(Notepad)process instance in my processes(foreach)/在終止當前線程之前1000毫秒的instance。設置為等待WaitForExit(1000)。Instance。CloseMainWindow();private void button view _ click(object sender,eventargs e)listbox 1 . items . clear();/Process類型
5、的數(shù)組,以創(chuàng)建系統(tǒng)中的所有進程和相關,Process processesProcesses=Process。get processes();訪問進程中(Process p in processes,Process p in processes) /Idle的StartTime出現(xiàn)異常,從而導致if (p.ProcessName!=Idle) /將每個進程名和進程開始時間添加到listBox1上的this . listbox 1 . items . add(string . format(0,-3013360h :m 333660 m)中,微軟網(wǎng)站333660,命名空間系統(tǒng)。Threading中
6、定義的7.1.1線程類(thread)的屬性和方法,因此在創(chuàng)建多線程時命名空間System .必須引入Threading。Thread類的常規(guī)屬性和方法是以下5個茄子優(yōu)先級類別:屬性Priority:線程優(yōu)先級設置、AboveNormal(略高)、BelowNormal(略低)和Normal(中等,默認值),例如myThread .高優(yōu)先級線程首先運行,只有高優(yōu)先級線程停止、休眠或掛起時,才會運行低優(yōu)先級線程。配置函數(shù):Thread(new ThreadStart(線程中要執(zhí)行的無參數(shù)方法的名稱);參數(shù)內(nèi)指定的方法需要程序員自定義。牙齒方法完成線程必須完成的任務,退出方法,線程終止。牙齒方法必
7、須是公共void類型的方法,并且必須在沒有參數(shù)的情況下使用。如果需要參數(shù),可以使用C#2.0中的新構(gòu)造函數(shù)thread(新參數(shù)化線程中要運行的參數(shù)方法的名稱)。方法Start():設置線程類對象后,不啟動線程,將線程更改為就緒狀態(tài),線程在可用CPU的運行時執(zhí)行。方法IsAlive():檢查線程對象是否存在、=true以及線程是否存在。方法Abort():取消線程對象。由于無法取消不再存在的線程對象,因此在取消線程對象之前,必須使用IsAlive()方法檢查線程對象是否存在。靜態(tài)方法Sleep():設置線程休眠參數(shù)的時間(以毫秒為單位),線程處于休眠狀態(tài)。線程休眠后,可以執(zhí)行其他準備線程。休眠指
8、定的時間后,線程進入就緒狀態(tài)。方法Suspend()和resume (): suspend()方法會暫停執(zhí)行緒。Resume方法將暫停的線程置于就緒狀態(tài)。也就是說,可用CPU的執(zhí)行時間,線程處于執(zhí)行狀態(tài)。如果線程暫停多次,則可以調(diào)用Resume()方法一次以喚醒該線程。由于不安全,建議不要同時使用兩個函數(shù)。創(chuàng)建7.1.2線程,示例7.1牙齒示例使用線程類Thread創(chuàng)建新線程,以顯示標簽控件中線程的執(zhí)行時間。在表單上放置兩個按鈕,然后使用單擊按鈕完成創(chuàng)建新線程和停止線程的功能。新項目。在表單中放置兩個按鈕和一個標示控件(label1)。Button1的屬性Text=“新線程”,Enabled=
9、true。Button2的屬性Text= undo ,Enabled=false。Form1.cs頭部中的using System。添加Threading語句。Form1類中表示類dFun的變量、定義類dFun的變量和線程類變量:delegate void dFun(string text);DFun dFun1/dFun類別變數(shù)private Thread thread/螺紋類別變數(shù)名為新螺紋的按鈕(button1)其他單擊事件處理函數(shù)private void button 1 _ click(object sender,eventargs e) thread Label1。text=0;/
10、運行時從0開始,thread .start();Button1。Enabled=falseButton2。Enabled=true,為名為“撤消”的按鈕(button2)添加單擊事件處理函數(shù)private void button 2 _ click(object sender,eventargs e)if(thread)/線程對象Enabled=trueButton2。Enabled=false,C#線程模型使您可以將任何void類型的公共方法(靜態(tài)或非靜態(tài))用作線程方法,從而允許您在所有類(不必是類的子類)中定義線程方法??梢栽谕活愔卸x多個線程方法。C#2.0不能在牙齒函數(shù)中直接修改非線
11、程控件屬性。這是防止多個線程同時修改同一控件相同屬性的錯誤。必須使用控件Invoke方法修改非線程控件屬性。Invoke方法是兩個參數(shù),參數(shù)1是修改控件屬性方法的代表,參數(shù)2是object數(shù)組,是傳遞給指示參數(shù)1牙齒的方法的參數(shù)。定義Form1類的線程方法,如下所示:public void fun() while(true)/方法結(jié)束,線程結(jié)束int X=convert . toint 32(label 1 . text . X;String s=Convert。ToString(x);Label1 .Invoke(dFun1,new objects);Thread .sleep(1000);
12、/線程休眠1秒Form1類的label1。將Text修改方法定義為:private void settext(string text)label 1 . text=text;在Form1類的配置函數(shù)末尾添加語句dFun1=new dFun(SetText)。關閉程序之前,必須取消線程對象。主表單的Closing事件附加事件處理函數(shù)private void form 1 _ formclosing(object sender,formclosingeventargs e)運行if (thread.isalive編譯,單擊標題為新單擊標題為取消的按鈕,線程對象取消,計數(shù)器停止計數(shù)。7.1.3進度欄
13、(ProgressBar)控件,進度欄(ProgressBar)控件經(jīng)常用于顯示任務的進度。在某些情況下,如果需要完成長時間的任務(例如安裝軟件),則不顯示消息可能表明作業(yè)正在進行或已關閉。您可以使用進度條顯示安裝進度,以指示安裝正在進行。進度條的常規(guī)屬性如下:屬性Maximum和Minimum:進度條的最大值和最小值(整數(shù)),默認值分別為100,0。屬性Step:變形的階段。默認值為10。屬性值:進度條當前位置表示的值。修改牙齒值以達到Step時,進度將增加一格。7.1.3線程控制進度條,有時需要設置多個線程。每個線程基本上執(zhí)行相同的功能,但各個參數(shù)不同(例如,每個線程執(zhí)行相同的操作,但受控
14、制的對象不同)。您可以使用C#2.0中定義的線程類配置函數(shù)thread(new parameterized threadstart()創(chuàng)建新線程,作為實現(xiàn)線程所需操作的方法。牙齒方法只接受一個object類型的參數(shù),并且可以參數(shù)傳遞其他對象。有關實施方法,請參閱以下示例:示例7.2創(chuàng)建兩個線程,分別控制兩個進度條(ProgressBar)控件和每個進度條屬性值的更改速度。具體實施步驟包括:運營效果包括:新項目。Form1.cs頭部中的using System。添加Threading語句。在表單中放置兩個進度欄(ProgressBar)控件。屬性Name分別為ProgressBar1和Progr
15、essBar2。Form1類的結(jié)構(gòu)宣言、類dFun的顯示、定義類dFun的變量和線程類變量:結(jié)構(gòu)定義、兩個參數(shù)傳遞、定義結(jié)構(gòu)表示兩個參數(shù)struct Fargs public ProgressBar PB。/線程控制對象public int SleepT/線程休眠時間,delegate void dFun(progress bar p);DFun dFun1/Fun類別變數(shù)private Thread thread1/螺紋類別變數(shù)private Thread thread2Fargs Frags1/定義結(jié)構(gòu)變量Form1類的線程方法(只能有一個object類參數(shù)):public void fu
16、n(object data)fargs frags 2=(fargs)data;ProgressBar P1=Frags2。PB;Int SleepTime=Frags2。SleepTwhile(P1 . value 100)P1 . invoke(dfun 1,new object P1);Thread .sleep(sleep time);5.定義如何修改Form1類的進度條的屬性Value,如下所示:privatevoidsetvalue(progress barp 2)p2 . value=1;6.將事件函數(shù)添加到Form1類的Load事件(其中代碼不能放在配置函數(shù)中):private void form 1 _ Load(object sender,eventargs e)dfun 1=newd fun thread 1=thread 2=newthread(new parameterized thread sta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GBT 1251.1-2008人類工效學 公共場所和工作區(qū)域的險情信號 險情聽覺信號》專題研究報告
- 《GB 4706.60-2008家用和類似用途電器的安全 衣物干燥機和毛巾架的特殊要求》專題研究報告
- 《GBT 22085.1-2008電子束及激光焊接接頭 缺欠質(zhì)量分級指南 第1部分:鋼》專題研究報告
- 道路安全培訓提綱內(nèi)容課件
- 2025-2026年西師版初一數(shù)學上冊期末題庫試題附答案
- 2025-2026年蘇教版九年級數(shù)學上冊期末試題解析+答案
- 2026年甘肅隴南市高職單招語文試題及答案
- 三年(2023-2025)黑龍江中考語文真題分類匯編:專題08 名著閱讀(解析版)
- 邊際貢獻培訓課件
- 水利工程清潔工程能源機械方案
- 翻車機工操作技能水平考核試卷含答案
- 2025年中職食品雕刻(食品雕刻技術(shù))試題及答案
- 2026青海西寧市湟源縣水務發(fā)展(集團)有限責任公司招聘8人考試參考試題及答案解析
- 舞臺燈光音響控制系統(tǒng)及視頻顯示系統(tǒng)安裝施工方案
- (2025年)昆山杜克大學ai面試真題附答案
- 污水處理設施運維服務投標方案(技術(shù)標)
- (完整word版)英語四級單詞大全
- 井下作業(yè)技術(shù)油水井措施酸化課件解析
- 旅游接待業(yè) 習題及答案匯總 重大 第1-10章 題庫
- 智慧金庫項目需求書
- DB41T 2397-2023 機關食堂反食品浪費管理規(guī)范
評論
0/150
提交評論