IOCP工作线程求科普解决方案
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: