首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

IOCP工作线程求科普解决方案

2013-07-16 
IOCP工作线程求科普DWORD WINAPI CSessionManager::_RecvWorkThread(LPVOID lpParam){return GetInstance(

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;
}



为什么不加Sleep(1), CPU会变成100%占用。GetQueuedCompletionStatus不是阻塞住了么。 IOCP?CPU
[解决办法]
单步调试下吧

[解决办法]
应该和sleep(1)没关系的。
是不是其他的代码有问题?
[解决办法]
figure out what the most time-consuming part using a profiler
[解决办法]
看一下可能是GetQueuedCompletionStatus失败,出现死循环 。

热点排行