THREAD_FUN CNet::DemonLoop(LPVOID p) { CNet * pThis = (CNet *)p; s64 lTick = ::GetCurrentTimeTick(); while (true) { struct iocp_event * pEvent = NULL; if (pThis->m_queue.read(pEvent)) { if (pEvent != NULL) { switch (pEvent->event) { case EVENT_ASYNC_ACCEPT: pThis->DealAcceptEvent(pEvent); break; case EVENT_ASYNC_CONNECT: pThis->DealConnectEvent(pEvent); break; case EVENT_ASYNC_RECV: pThis->DealRecvEvent(pEvent); break; case EVENT_ASYNC_SEND: pThis->DealSendEvent(pEvent); break; default: break; } } } else if (pThis->m_stop && pThis->m_queue.IsEmpty()) { NET_TRACE("DemonLoop 停止工作"); return 0; } if(!pThis->m_demo) { if (::GetCurrentTimeTick() - lTick > (u32)(pThis->m_nFrameMs) && pThis->m_nFrameMs != 0) { break; } } } return 0; }