![基于多核編程的案例分析學習教案_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/6/8c3e4a78-6a78-457e-84c8-daa69890c03b/8c3e4a78-6a78-457e-84c8-daa69890c03b1.gif)
![基于多核編程的案例分析學習教案_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/6/8c3e4a78-6a78-457e-84c8-daa69890c03b/8c3e4a78-6a78-457e-84c8-daa69890c03b2.gif)
![基于多核編程的案例分析學習教案_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/6/8c3e4a78-6a78-457e-84c8-daa69890c03b/8c3e4a78-6a78-457e-84c8-daa69890c03b3.gif)
![基于多核編程的案例分析學習教案_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/6/8c3e4a78-6a78-457e-84c8-daa69890c03b/8c3e4a78-6a78-457e-84c8-daa69890c03b4.gif)
![基于多核編程的案例分析學習教案_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/6/8c3e4a78-6a78-457e-84c8-daa69890c03b/8c3e4a78-6a78-457e-84c8-daa69890c03b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、會計學1基于多核編程的案例基于多核編程的案例(n l)分析分析第一頁,共36頁。第1頁/共35頁第二頁,共36頁??梢詮恼n程(kchng)網(wǎng)站上下載源代碼第2頁/共35頁第三頁,共36頁。using System.Net.Sockets; /namespaceTcpListener listener = new TcpListener(portNum);listener.Start();TcpClient handler = listener.AcceptTcpClient();int i = ClientSockets.Add ( new ClientHandler(handler) ) ;
2、 (ClientHandler) ClientSocketsi).Start() ;客戶端Socket處理線程客戶端連接實例集監(jiān)聽線程回收線程為每個已經(jīng)接收的連接產(chǎn)生一個線程TCP客戶端請求垃圾線程將被回收允許(ynx)TCP服務接收客戶端的連接請求。分別(fnbi)為每個請求產(chǎn)生一個線程實例。并啟動。第3頁/共35頁第四頁,共36頁。private static ArrayList ClientSockets ;lock ( ClientSockets.SyncRoot ) int i = ClientSockets.Add ( new ClientHandler(handler) ) ;
3、(ClientHandler) ClientSocketsi).Start() ;線程同步(tngb)第4頁/共35頁第五頁,共36頁。第5頁/共35頁第六頁,共36頁。ThreadReclaim = new Thread( new ThreadStart(Reclaim) );ThreadReclaim.Start() ;private static void Reclaim() while (ContinueReclaim) lock( ClientSockets.SyncRoot ) for ( int x = ClientSockets.Count-1 ; x = 0 ; x- ) O
4、bject Client = ClientSocketsx ; if ( !( ( ClientHandler ) Client ).Alive ) ClientSockets.Remove( Client ) ; Console.WriteLine(A client left) ; Thread.Sleep(200) ; 第6頁/共35頁第七頁,共36頁。ContinueReclaim = false ; ThreadReclaim.Join() ; foreach ( Object Client in ClientSockets ) ( (ClientHandler) Client ).S
5、top() ; 第7頁/共35頁第八頁,共36頁。第8頁/共35頁第九頁,共36頁。 / Schedule task again if ( SharedStateObj.ContinueProcess & !bQuit ) ThreadPool.QueueUserWorkItem(new WaitCallback(this.Process), SharedStateObj);else networkStream.Close(); ClientSocket.Close(); / Deduct no. of clients by one Interlocked.Decrement(ref
6、SharedStateObj.NumberOfClients ); Console.WriteLine(A client left, number of connections is 0, SharedStateObj.NumberOfClients) ; / Signal main process if this is the last client connections / main thread requested to stop.if ( !SharedStateObj.ContinueProcess & SharedStateObj.NumberOfClients = 0
7、) SharedStateObj.Ev.Set();第9頁/共35頁第十頁,共36頁。任務處理任務處理任務處理FIFO隊列結(jié)構(gòu)客戶端請求任務監(jiān)聽線程當客戶端請求到達,將請求放到隊列中。class ClientConnectionPool / Creates a synchronized wrapper around the Queue. private Queue SyncdQ = Queue.Synchronized( new Queue() );第10頁/共35頁第十一頁,共36頁。class ClientService const int NUM_OF_THREAD = 10; priv
8、ate ClientConnectionPool ConnectionPool ; private bool ContinueProcess = false ; private Thread ThreadTask = new ThreadNUM_OF_THREAD ; public ClientService(ClientConnectionPool ConnectionPool) this .ConnectionPool = ConnectionPool ; public void Start() ContinueProcess = true ; / Start threads to han
9、dle Client Task for ( int i = 0 ; i 0 ) client = ConnectionPool.Dequeue() ; if ( client != null ) client.Process() ; / Provoke client / if client still connect, schedufor later processingle it if ( client.Alive ) ConnectionPool.Enqueue(client) ; Thread.Sleep(100) ; 第11頁/共35頁第十二頁,共36頁。第12頁/共35頁第十三頁,共
10、36頁。第13頁/共35頁第十四頁,共36頁。第14頁/共35頁第十五頁,共36頁。第15頁/共35頁第十六頁,共36頁。第16頁/共35頁第十七頁,共36頁。第17頁/共35頁第十八頁,共36頁。第18頁/共35頁第十九頁,共36頁。第19頁/共35頁第二十頁,共36頁。服務器端程序界面第20頁/共35頁第二十一頁,共36頁。第21頁/共35頁第二十二頁,共36頁。主線程:管理程序狀態(tài)數(shù)據(jù)包包頭重新封裝。(傳輸速度會受影響,但是質(zhì)量得到了保證。否則(fuz)在傳圖片時會出現(xiàn)缺失、移位等現(xiàn)象)任務線程:發(fā)送線程接收線程顯示進度條的線程采用臨界段進行同步處理第22頁/共35頁第二十三頁,共36頁
11、。CTCPClient_CE:CTCPClient_CE() /初始化socket環(huán)境(hunjng) WSADATA wsd; WSAStartup(MAKEWORD(1,1),&wsd); /創(chuàng)建線程退出事件句柄 m_exitThreadEvent = CreateEvent(NULL,FALSE,FALSE,NULL); m_bRec = true;第23頁/共35頁第二十四頁,共36頁。/*-【函數(shù)介紹】: 用于打開客戶端socket【入口參數(shù)】: pWnd用于指定父窗口句柄【出口參數(shù)】: (無)【返回 值】: TRUE:打開成功;FALSE:打開失敗-*/BOOL CTCPC
12、lient_CE:Open(CWnd * pWnd) /復位線程退出事件(shjin) ResetEvent(m_exitThreadEvent); /存儲父窗口句柄 m_pOwnerWnd = pWnd; /創(chuàng)建TCP套接字 m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(m_socket = SOCKET_ERROR);return FALSE; /創(chuàng)建通訊線程 m_tcpThreadHandle = CreateThread(NULL,0,SocketThreadFunc,this,0,NULL); if (m_tcpThre
13、adHandle = NULL) closesocket(m_socket); return FALSE; return TRUE;第24頁/共35頁第二十五頁,共36頁。第25頁/共35頁第二十六頁,共36頁。第26頁/共35頁第二十七頁,共36頁。第27頁/共35頁第二十八頁,共36頁。第28頁/共35頁第二十九頁,共36頁。第29頁/共35頁第三十頁,共36頁。第30頁/共35頁第三十一頁,共36頁。第31頁/共35頁第三十二頁,共36頁。第32頁/共35頁第三十三頁,共36頁。第33頁/共35頁第三十四頁,共36頁。第34頁/共35頁第三十五頁,共36頁。NoImage內(nèi)容(nirng)總
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC TR 63558:2025 EN Automatic speech recognition: Classification according to acoustic and linguistic indicators in real-life applications
- 廠房長期租賃合同書
- 大數(shù)據(jù)智能營銷服務合同
- 環(huán)保設施建設施工合同
- 智慧物流園區(qū)運營服務協(xié)議
- 院校與企業(yè)戰(zhàn)略合作協(xié)議書
- 房屋交易居間合同
- 合同資料員勞動合同
- 做時間的主人活動方案
- 個人勞務分包合同協(xié)議書
- 2025年中華工商時報社事業(yè)單位招聘12人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 安全生產(chǎn)事故調(diào)查與案例分析(第3版)課件 呂淑然 第1-4章 緒論-應急預案編制與應急管理
- 《教育強國建設規(guī)劃綱要(2024-2035年)》解讀講座
- 2024-2025學年廣東省深圳市寶安區(qū)高一(上)期末數(shù)學試卷(含答案)
- 同濟大學《線性代數(shù)》-課件
- 申請兩癌補助申請書
- 香港審計合同范例
- 2024年事業(yè)單位考試(面試)試題與參考答案
- 《高層建筑結(jié)構(gòu)》課件
- 校園安全形勢會商研判制度(4篇)
- 連鑄應急預案
評論
0/150
提交評論