




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療銷售咨詢合同范本
- 供應(yīng)商尾款合同范本
- 北京拆遷合同范本
- 單人旅游合同范本
- 單位郊區(qū)租房合同范本
- 丟車包賠協(xié)議合同范本
- 單位電線更換維修合同范例
- 醫(yī)藥調(diào)查項目合同范本
- 出錢經(jīng)營合同范本
- 農(nóng)業(yè)種植股合同范本
- 北師大版數(shù)學(xué)四年級下冊簡易方程練習(xí)200題及答案
- 課件:認(rèn)識鏡頭語言1:運鏡方式和常用的鏡頭術(shù)語
- (完整版)三年級上冊口算題卡1400道
- 淘寶客服轉(zhuǎn)正述職報告
- 提升電子商務(wù)的發(fā)展邏輯
- 提升醫(yī)療質(zhì)量減少醫(yī)療糾紛
- (完整)特種設(shè)備專項應(yīng)急預(yù)案
- 工程設(shè)計項目擬投入設(shè)計人員及設(shè)備
- 人教版五年級數(shù)學(xué)下冊課后作業(yè)設(shè)計 2.4質(zhì)數(shù)和合數(shù)(解析版)
- 高??蒲泄芾韻徝嬖噯栴}及回答
- 小學(xué)體質(zhì)測試標(biāo)準(zhǔn)
評論
0/150
提交評論