第八講多線程講義_第1頁
第八講多線程講義_第2頁
第八講多線程講義_第3頁
第八講多線程講義_第4頁
第八講多線程講義_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、回顧 u調試是搜尋和消除應用程序中的錯誤的過程u語法錯誤表示編譯器無法理解代碼u調試模式可用來重復編譯和排除應用程序中的錯誤,直至能夠成功運行u“局部變量”窗口允許用戶監(jiān)控當前程序中所有變量的值u單元測試和集成測試是測試大型應用程序的常用技術u當應用程序遇到運行時錯誤時,就會引發(fā)異常uC# 中的所有異常都派生自 Exception 類目標u理解線程的概念u理解.NET中線程的屬性和方法u創(chuàng)建和使用線程u理解線程的特點、優(yōu)點及使用場合同時執(zhí)行所有任務,時間更少,效率更高 人 體線程簡介讀 ,寫一覽無遺血液循環(huán)在同一時間點執(zhí)行各項進程 編譯程序 發(fā)送/接收郵件 打印文件 其他操作系統(tǒng)允許計算機同時

2、執(zhí)行多項操作程序(進程)線程簡介程序 1 程序 2線程 1線程 2線程 3線程 1線程 2線程 3單獨的執(zhí)行路徑線程簡介在以下情況中可能要使用到多線程: l程序需要同時執(zhí)行兩個或多個任務l程序要等待某事件的發(fā)生,例如用戶輸入、文件操作、網(wǎng)絡操作、搜索等l后臺程序System.Threading 命名空間 2-1 System.Threading 命名空間 2-2System.DelegateSystem. MulticastDelegateThreadStart System.ValueTypeSystem.EnumThreadPriority System.ObjectSystem.Thre

3、adingThread 類的屬性和方法 2-1引用System.Threading 命名空間Thread 線程實例名 = new Thread(new ThreadStart(方法名);運行在線程上的方法只創(chuàng)建但不啟動線程只創(chuàng)建但不啟動線程線程實例名.Start();Thread 類的屬性和方法屬性屬性CurrentThreadIsAliveNamePriorityThreadState方法方法Sleep()Abort()Join()Resume()Start() Suspend()靜態(tài)靜態(tài)線程的生命周期在 I/O 操作期間線程被阻止線程已創(chuàng)建但并未啟動線程已啟動I/O 操作完成后運行線程被阻

4、止,另一個操作正在進行提前中斷或特地停止線程暫時中斷的線程 線程已恢復示例class SimpleThreadDemo static void Main(string args) Thread.CurrentThread.Name = “主線程;Thread objThread = new Thread(new ThreadStart(ActionMethod);objThread.Name = “子線程; /啟動子線程, 并為該線程執(zhí)行 ActionMethodobjThread.Start();/這將為主線程執(zhí)行 ActionMethodActionMethod(); static voi

5、d ActionMethod() for(int count = 1; count = 10 ; count+) Console.WriteLine(“線程名: + Thread.CurrentThread.Name); 實例化 objThread 線程并開始執(zhí)行 ActionMethod()將由應用程序線程執(zhí)行輸出結果混亂鎖定機制程序線程1 1線程2 2共享資源 鎖定機制保證每次只有一個線程可以訪問共享資源緩沖和隔離示例class ThreadLockDemostatic void Main()Thread.CurrentThread.Name = “主線程;ThreadLockDemo o

6、bjDemo = new ThreadLockDemo();Thread newThread = new Thread(new ThreadStart(objDemo.DoTask);newThread.Name = “子線程;newThread.Start();objDemo.DoTask();void DoTask()lock(this)for(int count = 1; count =4990; index-) Console.WriteLine(index); static void Main(string args)Thread objThreadOne = new Thread(

7、new ThreadStart(TaskOne);Thread objThreadTwo = new Thread(new ThreadStart(TaskTwo);objThreadOne.Start();objThreadTwo.Start();static void TaskOne() for(int count=1;count=5;count+) Console.WriteLine(count*2); 無優(yōu)先級線程,同時執(zhí)行,輸出無序.示例static void Main(string args) Thread.CurrentThread.Name = “主線程; Thread obj

8、ThreadOne = new Thread(new ThreadStart(TaskOne); objThreadOne.Name = “子線程 1; Thread objThreadTwo = new Thread(new ThreadStart(TaskTwo); objThreadTwo.Name = “子線程 2; / 這將啟動子線程 objThreadOne.Start(); objThreadTwo.Start(); objThreadTwo.Priority = ThreadPriority.Highest;將在執(zhí)行第一個線程前執(zhí)行 objThreadTwo線程安全性q 線程安

9、全性就是保護類的成員和代碼的安全,從而使它們不會同時被幾個線程中斷q 如果類中的成員和代碼受到保護而不會被幾個線程中斷,則這個類稱為線程安全的類void DoTask()lock(this).應用程序示例演示多線程計算的應用程序應用程序示例/lock(this)long sum = long.Parse(txtOutput.Text);sum += result;txtOutput.Text = sum.ToString();演示輸出結果應用程序示例思考:思考:1.為何100個線程所消耗的時間比一個線程消耗的時間要長?2.對于游戲,不同的動作(例如跑步和射擊)會真的采用線程來描述嗎? 如果不采用線程,你知道哪些方案?作業(yè)u進程和線程有什么區(qū)別?u2個線程。線程1從1循環(huán)到10000,線程2從1循環(huán)到20000,結果分別在其下控制臺中顯示。 作業(yè)u編寫一個基于Windows窗體的應用程序,實現(xiàn)打字練習的功能,要使用多線程,在主線程里用Timer控件定時產(chǎn)生Label控件,每個Label控件顯示一個隨機產(chǎn)生的字母,每

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論