黑馬程式設計師 執行緒 多執行緒

2021-06-15 07:39:54 字數 4655 閱讀 2302

-------------------------------------------- 

asp.net+android+io開發、.net培訓、期待與您交流!

-----------------------------------

執行緒概念:

執行緒是程序中執行運算的最小單位,亦即執行處理機排程的基本單位。如果把程序理解為在邏輯上作業系統所完成的任務,那麼執行緒表示完成該任務的許多可能的子任務之一。

引入執行緒的好處:

(1)易於排程。  

(2)提高併發性。通過執行緒可方便有效地實現併發性。程序可建立多個執行緒來執行同一程式的不同部分。  

(3)開銷少。建立執行緒比建立程序要快,所需開銷很少。  

(4)利於充分發揮多處理器的功能。通過建立多執行緒程序(即乙個程序可具有兩個或更多個執行緒),每個執行緒在乙個處理器上執行,從而實現應用程式的併發性,使每個處理器都得到充分執行。

每個執行緒都要有乙個暫存器:用於儲存當前執行的程式的狀態資訊,

執行緒啟動時,通過委託呼叫該方法,(委託的好處)

執行緒啟動時,呼叫傳過來的委託,委託就會執行相應的方法,實現執行緒執行方法

執行緒啟動時要傳乙個方法過來

程序中有乙個預設執行緒

示例:**

void counttime()

timespan  ts = begintime.subtract(datetime.now);

messagebox.show(ts.totalmilliseconds);

}

//使用多執行緒來解決ui卡死問題

private void  btnmulthread_click(objectsender,evenargs e)

建立執行緒時要先準備好乙個方法(同時做多個事情)

產生乙個執行緒的4步驟:

1:編寫產生執行緒所要執行的方法

2:引用system.threading命名空間

3:例項化thread類,並傳入乙個指向執行緒所要執行的方法的委託,

(這時候這個執行緒已經產生,從但是還沒有執行)

4呼叫thread例項的start方法,標記該執行緒可以被cpu執行了,但具體執行時間由cpu決定

注意當把主窗體關閉以後(關閉ui):

其實執行緒還在執行

預設前台執行緒:只有所有的前台執行緒都關閉才能完成程式關閉

後台執行緒:中要所有的前台執行緒結束,後台執行緒自動結束

示例**:如何將乙個執行緒設定為後台執行緒

threadfirst.isbackground=true;

關閉:微軟的檢查在formthread中加上一句:

textbox.checkfortllegalcrossthreadcalls=false;

方法的重入問題:

執行緒問題設定斷點是不合理的

start()啟動執行緒

abort()終止執行緒

thread.sleep(1):靜態方法,可以使當前執行緒停止一段時間執行

name是執行緒名

thread.currentthread獲取當前的執行緒引用

執行緒執行帶有引數的方法:

void showtxtname(object  name)//注意此處一定要是object型別的

執行緒:

thread  thread = newthread(showtxtname);//傳入乙個帶有引數的方法

thread.isbackground=true;

thread.start();//傳入乙個引數(傳入的方法要去呼叫的引數)

多個引數的:示例

方法:

void showtxtname2(objectli)

}呼叫與執行:

private

void form1_load(object sender, eventargse));}

示例**:

伺服器端:

using system.net.sockets;

using system.net;

using system.threading;

namespace mychatroomserver

threadthreadwatch = null;//

負責監聽客戶端

連線請求的執行緒

socketsocketwatch = null;//

負責監聽的套接字

private

void btn_beginglisten_click(object sender,eventargse)

voidwatchconnection()

}客戶端:

using system.net;

using system.net.sockets;

namespace client

private

void btn_beginglisten_click(object sender,eventargse)}}

以上示例的前提是兩者的ipendpoint endpoint要相同 對不對這個問題

socket的通訊過程:

伺服器端:

申請乙個socket

繫結到乙個ip位址和乙個埠上

開戶偵聽,等待接收連線

客戶端:

申請乙個socket

連線伺服器(指明ip位址和埠號)

注意:伺服器端接到連線請求後,產生乙個新的socket

(埠大於1024)與客戶端建立連線並進行通訊,原偵聽socket繼續偵聽

(怎樣實現繼續監聽)

解決方法**如下:

voidwatchconnection()

}也就是加個死迴圈!!!

通訊:

客戶端

namespace 客戶端

threadthreadclient = null;

socketsocketclient = null;

private

void btn_start_click(objectsender,eventargs e)

voidreceivemsg()

}private

void btn_sendmsg_click(objectsender,eventargs e)}}

伺服器端:

namespace 多執行緒

threadthreadreceiverformclient =null;

socketsocketwatch = null;

threadthreadwatch = null;

private

voidbtn_start_click(object sender, eventargs e)

dictionary

disc =new

dictionary

();//

每乙個客戶的請求都給它乙個

套接字

voidcontinueaccept()

}private

void btn_send_click(objectsender,eventargs e)

voidreceivefromclient(object socket)//

注意此處的引數是乙個

object

型別的 }}

-------------------------------------------- 

asp.net+android+io開發、.net培訓、期待與您交流!

-----------------------------------

黑馬程式設計師 多執行緒

windows phone 7手機開發 net培訓 期待與您交流!一 程序與執行緒 l 程序 乙個執行的程式就是乙個程序,程序包括執行中的程式和程式需要用到的記憶體和系統資源 乙個程序至少有乙個執行緒,乙個程序中多個執行緒可以併發執行 l 執行緒 程式中的乙個執行流,每個執行緒都有自己的專有暫存器 ...

黑馬程式設計師 多執行緒

asp.net android io開發 net培訓 期待與您交流!執行緒與程序的關係 乙個程式就相當於乙個程序 乙個程序至少有乙個執行緒 同乙個程序中的多個執行緒之間可以 併發 執行 執行緒 1 乙個執行緒一次只能完成乙個任務 2 多執行緒方法重入 cpu是不斷的在多個執行緒之間來回切換執行的 3...

黑馬程式設計師 多執行緒

asp.net android ios開發 net培訓 期待與您交流!多執行緒為什麼要用多執行緒?1 讓計算機 同時 做多件事情,節約時間。2 後台執行程式,提高程式的執行效率,也不會使主介面出現無響應的情況。3 多執行緒可以讓乙個程式 同時 處理多個事情。4 計算機cpu 大部分時間處於空閒狀態,...