--------------------------------------------
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 大部分時間處於空閒狀態,...