資源簡介
完成端口示例代碼:IOCPExample_By_PiggyXP.rar

代碼片段和文件信息
#include?“StdAfx.h“
#include?“IOCPModel.h“
#include?“MainDlg.h“
//?每一個處理器上產生多少個線程(為了最大限度的提升服務器性能,詳見配套文檔)
#define?WORKER_THREADS_PER_PROCESSOR?2
//?同時投遞的Accept請求的數量(這個要根據實際的情況靈活設置)
#define?MAX_POST_ACCEPT??????????????10
//?傳遞給Worker線程的退出信號
#define?EXIT_CODE????????????????????NULL
//?釋放指針和句柄資源的宏
//?釋放指針宏
#define?RELEASE(x)??????????????????????{if(x?!=?NULL?){delete?x;x=NULL;}}
//?釋放句柄宏
#define?RELEASE_HANDLE(x)???????????????{if(x?!=?NULL?&&?x!=INVALID_HANDLE_VALUE){?CloseHandle(x);x?=?NULL;}}
//?釋放Socket宏
#define?RELEASE_SOCKET(x)???????????????{if(x?!=INVALID_SOCKET)?{?closesocket(x);x=INVALID_SOCKET;}}
CIOCPModel::CIOCPModel(void):
m_nThreads(0)
m_hShutdownEvent(NULL)
m_hIOCompletionPort(NULL)
m_phWorkerThreads(NULL)
m_strIP(DEFAULT_IP)
m_nPort(DEFAULT_PORT)
m_pMain(NULL)
m_lpfnAcceptEx(?NULL?)
m_pListenContext(?NULL?)
{
}
CIOCPModel::~CIOCPModel(void)
{
//?確保資源徹底釋放
this->Stop();
}
///////////////////////////////////////////////////////////////////
//?工作者線程:??為IOCP請求服務的工作者線程
//?????????也就是每當完成端口上出現了完成數據包,就將之取出來進行處理的線程
///////////////////////////////////////////////////////////////////
DWORD?WINAPI?CIOCPModel::_WorkerThread(LPVOID?lpParam)
{????
THREADPARAMS_WORKER*?pParam?=?(THREADPARAMS_WORKER*)lpParam;
CIOCPModel*?pIOCPModel?=?(CIOCPModel*)pParam->pIOCPModel;
int?nThreadNo?=?(int)pParam->nThreadNo;
pIOCPModel->_ShowMessage(“工作者線程啟動,ID:?%d.“nThreadNo);
OVERLAPPED???????????*pOverlapped?=?NULL;
PER_SOCKET_CONTEXT???*pSocketContext?=?NULL;
DWORD????????????????dwBytesTransfered?=?0;
//?循環處理請求,知道接收到Shutdown信息為止
while?(WAIT_object_0?!=?WaitForSingleobject(pIOCPModel->m_hShutdownEvent?0))
{
BOOL?bReturn?=?GetQueuedCompletionStatus(
pIOCPModel->m_hIOCompletionPort
&dwBytesTransfered
(PULONG_PTR)&pSocketContext
&pOverlapped
INFINITE);
//?如果收到的是退出標志,則直接退出
if?(?EXIT_CODE==(DWORD)pSocketContext?)
{
break;
}
//?判斷是否出現了錯誤
if(?!bReturn?)??
{??
DWORD?dwErr?=?GetLastError();
//?顯示一下提示信息
if(?!pIOCPModel->HandleError(?pSocketContextdwErr?)?)
{
break;
}
continue;??
}??
else??
{??
//?讀取傳入的參數
PER_IO_CONTEXT*?pIoContext?=?CONTAINING_RECORD(pOverlapped?PER_IO_CONTEXT?m_Overlapped);??
//?判斷是否有客戶端斷開了
if((0?==?dwBytesTransfered)?&&?(?RECV_POSTED==pIoContext->m_OpType?||?SEND_POSTED==pIoContext->m_OpType))??
{??
pIOCPModel->_ShowMessage(?_T(“客戶端?%s:%d?斷開連接.“)inet_ntoa(pSocketContext->m_ClientAddr.sin_addr)?ntohs(pSocketContext->m_ClientAddr.sin_port)?);
//?釋放掉對應的資源
pIOCPModel->_RemoveContext(?pSocketContext?);
? continue;??
}??
else
{
switch(?pIoContext->m_OpType?)??
{??
?//?Accept??
case?ACCEPT_POSTED:
{?
//?為了增加代碼可讀性,這里用專門的_DoAccept函數進行處理連入請求
pIOCPModel->_DoAccpet(?pSocketContext?pIoContext?);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????I.A....?????21877??2011-08-30?12:40??PiggyIOCPServer_2008\PiggyIOCPServer\IOCPModel.cpp
?????文件???????8164??2011-08-30?12:40??PiggyIOCPServer_2008\PiggyIOCPServer\IOCPModel.h
?????文件???????4950??2011-08-30?12:40??PiggyIOCPServer_2008\PiggyIOCPServer\MainDlg.cpp
?????文件???????1446??2010-12-28?15:20??PiggyIOCPServer_2008\PiggyIOCPServer\MainDlg.h
?????文件??????59672??2009-10-07?00:29??PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.aps
?????文件???????1709??2009-09-30?10:19??PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.cpp
?????文件????????497??2009-10-06?15:53??PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.h
?????文件???????5804??2009-10-07?00:29??PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.rc
?????文件???????5878??2010-12-28?15:05??PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.vcproj
?????文件???????1413??2009-10-09?17:10??PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.vcproj.HAOTHINK.Hao?Wang.user
?????文件???????1419??2011-02-28?18:04??PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.vcproj.HAOWANGBOOK.Thinkpad.user
?????文件???????1405??2010-09-01?02:03??PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.vcproj.MYPC.Piggy.user
?????文件???????2723??2009-09-30?10:19??PiggyIOCPServer_2008\PiggyIOCPServer\ReadMe.txt
?????文件??????21630??2003-07-23?17:52??PiggyIOCPServer_2008\PiggyIOCPServer\res\PiggyIOCPServer.ico
?????文件????????405??2009-09-30?10:26??PiggyIOCPServer_2008\PiggyIOCPServer\res\PiggyIOCPServer.rc2
?????文件????????163??2009-10-06?23:46??PiggyIOCPServer_2008\PiggyIOCPServer\res\vssver2.scc
?????文件????????868??2009-09-30?10:41??PiggyIOCPServer_2008\PiggyIOCPServer\resource.h
?????文件????????146??2009-09-30?10:19??PiggyIOCPServer_2008\PiggyIOCPServer\stdafx.cpp
?????文件???????1772??2011-08-30?12:40??PiggyIOCPServer_2008\PiggyIOCPServer\stdafx.h
?????文件???????1030??2009-10-07?00:15??PiggyIOCPServer_2008\PiggyIOCPServer\targetver.h
?????文件????????594??2009-09-27?09:25??PiggyIOCPServer_2008\PiggyIOCPServer\XPst
?????文件?????138752??2011-08-30?12:40??PiggyStressTestClient.exe
?????目錄??????????0??2011-08-30?12:39??PiggyIOCPServer_2008\PiggyIOCPServer\res
?????目錄??????????0??2011-08-30?12:40??PiggyIOCPServer_2008\PiggyIOCPServer
?????目錄??????????0??2011-11-02?10:02??PiggyIOCPServer_2008
-----------?---------??----------?-----??----
???????????????282317????????????????????25
- 上一篇:spc統計過程控制軟件破解版.XLS
- 下一篇:全國主要公路SHP數據
評論
共有 條評論