什麼是程序?
當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資
源。而乙個程序又是由多個執行緒所組成的。
什麼是執行緒?
執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器(棧指標、程式計數器等),但**區
是共享的,即不同的執行緒可以執行同樣的函式。
什麼是多執行緒?
多執行緒是指程式中包含多個執行流,即在乙個程式中可以同時執行多個不同的執行緒來執行不同的任
務,也就是說允許單個程式建立多個並行執行的執行緒來完成各自的任務。
多執行緒的好處:
可以提高cpu的利用率。在多執行緒程式中,乙個執行緒必須等待的時候,cpu可以執行其它的執行緒而不
是等待,這樣就大大提高了程式的效率。
多執行緒的不利方面:
執行緒也是程式,所以執行緒需要占用記憶體,執行緒越多占用記憶體也越多;
多執行緒需要協調和管理,所以需要cpu時間跟蹤執行緒;
執行緒之間對共享資源的訪問會相互影響,必須解決競用共享資源的問題;
執行緒太多會導致控制太複雜,最終可能造成很多bug;
接下來將對c#程式設計中的多執行緒機制進行**。為了省去建立gui那些繁瑣的步驟,更清晰地逼近執行緒
的本質,接下來的所有程式都是控制台程式,程式最後的console.readline()是為了使程式中途停
下來,以便看清楚執行過程中的輸出。donet提供了那些控制項或類來操作執行緒?
執行緒操作在 system.threading 命名空間下
thread類有幾個至關重要的方法,描述如下:start():啟動執行緒;
sleep(int):靜態方法,暫停當前執行緒指定的毫秒數;
abort():通常使用該方法來終止乙個執行緒;
suspend():該方法並不終止未完成的執行緒,它僅僅掛起執行緒,以後還可恢復;
resume():恢復被suspend()方法掛起的執行緒的執行;
thread.threadstate 屬性
這個屬性代表了執行緒執行時狀態,在不同的情況下有不同的值,我們有時候可以通過對該值的判斷來設計程式流程。threadstate 屬性的取值如下:aborted:執行緒已停止;
abortrequested:執行緒的thread.abort()方法已被呼叫,但是執行緒還未停止;
background:執行緒在後台執行,與屬性thread.isbackground有關;
running:執行緒正在正常執行;
stopped:執行緒已經被停止;
stoprequested:執行緒正在被要求停止;
suspended:執行緒已經被掛起(此狀態下,可以通過呼叫resume()方法重新執行);
suspendrequested:執行緒正在要求被掛起,但是未來得及響應;
unstarted:未呼叫thread.start()開始執行緒的執行;
waitsleepjoin:執行緒因為呼叫了wait(),sleep()或join()等方法處於封鎖狀態;
執行緒的優先順序
當執行緒之間爭奪cpu時間時,cpu 是按照執行緒的優先順序給予服務的。在c#應用程式中,使用者可以設定5個不同的優先順序,由高到低分別是highest,abovenormal,normal,belownormal,lowest,在建立執行緒時如果不指定優先順序,那麼系統預設為threadpriority.normal。
給乙個執行緒指定優先順序,我們可以使用如下**:
//設定優先順序為最低mythread.priority=threadpriority.lowest;
互斥物件 mutex類 和lock關鍵字,
autoresetevent 訊號燈
monitor監視器
threadpool執行緒池
。net多執行緒 (backgroundworker元件使用說明)
一. 概述
backgroundworker是·net 2.0提供的乙個多執行緒元件,在應用程式中使用,可以非常簡單方便地實現ui控制項通訊,並自動處理多執行緒衝突問題。
二. 基本屬性
1. workerreportsprogress ,bool:是否允許報告進度;
2. workersupportscancellation,bool:是否允許取消執行緒。
3. cancellationpending,bool,get:讀取使用者是否取消該執行緒。
三. 基本事件
1. dowork:工作者執行緒
2. runworkercompleted :執行緒進度報告
3. progresschanged:執行緒結束報告
四. 基本方法
1. runworkerasync() :啟動工作者執行緒;
2. cancelasync():取消工作者執行緒;
3. reportprogress(int); 報告進度
五. **
//啟動
private void btnstart_click(object sender, eventargs e)
//通知執行緒停止
private void btnstop_click(object sender, eventargs e)
//工作者執行緒
private void backgroundworker_dowork(object sender, doworkeventargs e)
system.threading.thread.sleep(50); //幹點實際的事
backgroundworker.reportprogress(i); //報告進度}}
//執行緒進度報告
private void backgroundworker_progresschanged(object sender, progresschangedeventargs e)
//執行緒結束報告
private void backgroundworker_runworkercompleted(object sender, runworkercompletedeventargs e)
{
this.btnstart.enabled = true;
this.btnstop.enabled = false;
資料:c#多執行緒教程
權威.net多執行緒詳解(原始碼示例)
權威.net多執行緒詳解(原始碼示例)
如果你的程序沒有響應的時候可以看一下這篇
C 多執行緒學習
什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式。什麼是多執行緒...
C 學習 多執行緒
c c本身並沒有多執行緒的內容,需要使用pthread庫,include,編譯 lpthread,pthread是乙個posix標準,在不同平台上有不同實現,這裡以linux pthread庫為準.參考一,執行緒的建立 1,使用pythread create函式,原型如下 int pthread c...
C 多執行緒學習
這篇部落格主要是解決乙個問題。c 建立執行緒 互斥量 c 多執行緒庫原始碼分析 c 訊號量實現 用到的標頭檔案 include 執行緒 include 互斥量 include 非同步操作 include 條件變數 可能用到的命名空間 using namespace this thread 使用thr...