基于多核編程的案例分析學(xué)習(xí)教案_第1頁
基于多核編程的案例分析學(xué)習(xí)教案_第2頁
基于多核編程的案例分析學(xué)習(xí)教案_第3頁
基于多核編程的案例分析學(xué)習(xí)教案_第4頁
基于多核編程的案例分析學(xué)習(xí)教案_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、會計學(xué)1基于多核編程的案例分析基于多核編程的案例分析第一頁,編輯于星期一:九點 四十分。第1頁/共35頁第二頁,編輯于星期一:九點 四十分??梢詮恼n程網(wǎng)站上下載源代碼第2頁/共35頁第三頁,編輯于星期一:九點 四十分。using System.Net.Sockets; /namespaceTcpListener listener = new TcpListener(portNum);listener.Start();TcpClient handler = listener.AcceptTcpClient();int i = ClientSockets.Add ( new ClientHandl

2、er(handler) ) ; (ClientHandler) ClientSocketsi).Start() ;客戶端Socket處理線程客戶端連接實例集監(jiān)聽線程回收線程為每個已經(jīng)接收的連接產(chǎn)生一個線程TCP客戶端請求垃圾線程將被回收允許TCP服務(wù)接收客戶端的連接請求。分別為每個請求產(chǎn)生一個線程實例。并啟動。第3頁/共35頁第四頁,編輯于星期一:九點 四十分。private static ArrayList ClientSockets ;lock ( ClientSockets.SyncRoot ) int i = ClientSockets.Add ( new ClientHandler(

3、handler) ) ; (ClientHandler) ClientSocketsi).Start() ;線程同步第4頁/共35頁第五頁,編輯于星期一:九點 四十分。第5頁/共35頁第六頁,編輯于星期一:九點 四十分。ThreadReclaim = new Thread( new ThreadStart(Reclaim) );ThreadReclaim.Start() ;private static void Reclaim() while (ContinueReclaim) lock( ClientSockets.SyncRoot ) for ( int x = ClientSockets

4、.Count-1 ; x = 0 ; x- ) Object Client = ClientSocketsx ; if ( !( ( ClientHandler ) Client ).Alive ) ClientSockets.Remove( Client ) ; Console.WriteLine(A client left) ; Thread.Sleep(200) ; 第6頁/共35頁第七頁,編輯于星期一:九點 四十分。ContinueReclaim = false ; ThreadReclaim.Join() ; foreach ( Object Client in ClientSock

5、ets ) ( (ClientHandler) Client ).Stop() ; 第7頁/共35頁第八頁,編輯于星期一:九點 四十分。第8頁/共35頁第九頁,編輯于星期一:九點 四十分。 / Schedule task again if ( SharedStateObj.ContinueProcess & !bQuit ) ThreadPool.QueueUserWorkItem(new WaitCallback(this.Process), SharedStateObj);else networkStream.Close(); ClientSocket.Close(); / Ded

6、uct no. of clients by one Interlocked.Decrement(ref 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.Conti

7、nueProcess & SharedStateObj.NumberOfClients = 0 ) SharedStateObj.Ev.Set();第9頁/共35頁第十頁,編輯于星期一:九點 四十分。任務(wù)處理任務(wù)處理任務(wù)處理FIFO隊列結(jié)構(gòu)客戶端請求任務(wù)監(jiān)聽線程當(dāng)客戶端請求到達(dá),將請求放到隊列中。class ClientConnectionPool / Creates a synchronized wrapper around the Queue. private Queue SyncdQ = Queue.Synchronized( new Queue() );第10頁/共35頁第十一

8、頁,編輯于星期一:九點 四十分。class ClientService const int NUM_OF_THREAD = 10; private ClientConnectionPool ConnectionPool ; private bool ContinueProcess = false ; private Thread ThreadTask = new ThreadNUM_OF_THREAD ; public ClientService(ClientConnectionPool ConnectionPool) this .ConnectionPool = ConnectionPool

9、 ; public void Start() ContinueProcess = true ; / Start threads to handle 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.En

10、queue(client) ; Thread.Sleep(100) ; 第11頁/共35頁第十二頁,編輯于星期一:九點 四十分。第12頁/共35頁第十三頁,編輯于星期一:九點 四十分。第13頁/共35頁第十四頁,編輯于星期一:九點 四十分。第14頁/共35頁第十五頁,編輯于星期一:九點 四十分。第15頁/共35頁第十六頁,編輯于星期一:九點 四十分。第16頁/共35頁第十七頁,編輯于星期一:九點 四十分。第17頁/共35頁第十八頁,編輯于星期一:九點 四十分。第18頁/共35頁第十九頁,編輯于星期一:九點 四十分。第19頁/共35頁第二十頁,編輯于星期一:九點 四十分。服務(wù)器端程序界面第20頁

11、/共35頁第二十一頁,編輯于星期一:九點 四十分。第21頁/共35頁第二十二頁,編輯于星期一:九點 四十分。主線程:管理程序狀態(tài)數(shù)據(jù)包包頭重新封裝。(傳輸速度會受影響,但是質(zhì)量得到了保證。否則在傳圖片時會出現(xiàn)缺失、移位等現(xiàn)象) 任務(wù)線程: 發(fā)送線程 接收線程 顯示進(jìn)度條的線程采用臨界段進(jìn)行同步處理第22頁/共35頁第二十三頁,編輯于星期一:九點 四十分。CTCPClient_CE:CTCPClient_CE() /初始化socket環(huán)境 WSADATA wsd; WSAStartup(MAKEWORD(1,1),&wsd); /創(chuàng)建線程退出事件句柄 m_exitThreadEvent

12、= CreateEvent(NULL,FALSE,FALSE,NULL); m_bRec = true;第23頁/共35頁第二十四頁,編輯于星期一:九點 四十分。/*-【函數(shù)介紹】: 用于打開客戶端socket【入口參數(shù)】: pWnd用于指定父窗口句柄【出口參數(shù)】: (無)【返回 值】: TRUE:打開成功;FALSE:打開失敗-*/BOOL CTCPClient_CE:Open(CWnd * pWnd) /復(fù)位線程退出事件 ResetEvent(m_exitThreadEvent); /存儲父窗口句柄 m_pOwnerWnd = pWnd; /創(chuàng)建TCP套接字 m_socket = sock

13、et(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_tcpThreadHandle = NULL) closesocket(m_socket); return FALSE; return TRUE;第24頁/共35頁第二十五頁,編輯于星期一:九點 四十分。第25頁/共35頁第二十六頁,編輯于星期一:九點 四十分。第26頁/共35頁第二十七頁,編輯于星期一:九點 四十分。第27頁/共35頁第二十八頁,編輯于星期一:九點

溫馨提示

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

評論

0/150

提交評論