IOCP工作线程求科普
DWORD WINAPI CSessionManager::_RecvWorkThread(LPVOID lpParam)
{
return GetInstance()->RecvWorkThread(lpParam);
}
DWORD CSessionManager::RecvWorkThread(LPVOID lpParam)
{
int nRet = ERR_NONE;
DWORD dwTransferred;
CSession* pSession = NULL;
LPKG_SOCKET_DATA lpSockData = NULL;
while (m_isSrvRun)
{
dwTransferred = 0;
if (GetQueuedCompletionStatus(m_hCompletionPort, &dwTransferred, (PULONG_PTR)pSession, (LPOVERLAPPED *)&lpSockData, WSA_INFINITE))
{
if (dwTransferred == 0)
{//SOCKET 异常
}
else
{
switch (lpSockData->opType)
{
case IO_READ:
{
pSession->RecvDbData(lpSockData, dwTransferred);
}
break;
case IO_WRITE:
break;
case IO_ACCEPT:
break;
default:
//assert(0)
break;
}
}
}
else
{//与客服端断开连接
}
Sleep(1);//
}
return (DWORD)nRet;
}