为什么完成端口有客户连接时,工作线程不能退出,怎么解决?

解决方案 »

  1.   

    楼上的看看<WINDOWS网络编程技术>就知道什么是完成成端口了
    ^_^
      

  2.   

    工作线程处理
    bSuccess=GetQueuedCompletionStatus(g_hCompPort,
       &dwNumBytes, 
       (DWORD*)&PerHandleData, 
       (OVERLAPPED**)&ConText, 
       INFINITE);
    if(!bSuccess ||!ConText) continue; if(bSuccess)
    {
    //客户端断开连接
    if(PerHandleData != NULL)
    {
    if(dwNumBytes == 0 && (PerHandleData->pIOContext->OperationType==RECV_POST||
       PerHandleData->pIOContext->OperationType==SEND_POST))
    {
    iocp_server->CloseClient(PerHandleData); 
    continue;
    }
    }
    } if(bSuccess)
    {
    if(PerHandleData==NULL&&dwNumBytes==0)
    {
    //工作线程被通知结束
    SetEvent(g_ThreadHandles[pos]);
    InterlockedDecrement(&iocp_server->m_nConcurrentThreads);
    return 0;
    }
    }
    dwRet=iocp_server->ProcessJob(PerHandleData,ConText,dwNumBytes);