static UINT WINAPI ThreadJProcess(LPVOID lpParameter) { JProcess *pJProcess = (JProcess *)lpParameter; JMessage msg; msg.pBuffer = new byte[pJProcess->m_pJMsgManage->GetMsgLength()]; JRequest req; req.pBuffer = new byte[pJProcess->m_pJReqManage->GetReqLength()]; while (true) { //优先处理消息队列 if (pJProcess->PeekMessage(&msg, 0, 0, false)) { if (!pJProcess->GetMessage(&msg, 0, 0)) break; pJProcess->ProcEntry(pJProcess->GetState(), msg.dwEvent, msg.pBuffer, msg.nLength); continue; } //其次处理请求队列,从而控制请求的数量 if (pJProcess->PeekRequest(&req, 0, 0, false)) { if (!pJProcess->GetRequest(&req, 0, 0)) break; pJProcess->ProcEntry(pJProcess->GetState(), req.dwEvent, req.pBuffer, req.nLength); continue; } ::Sleep(10); } //收到EV_QUIT消息:退出消息循环,删除进程,杀死进程 delete msg.pBuffer; delete req.pBuffer; dword dwProcID = pJProcess->GetProcID(); g_pJProcManage->DelProcess(pJProcess); SAFE_DELETE(pJProcess); //删除退出标记 g_pJQuitManage->DelJQuit(dwProcID); return 0; }
JProcess *CreateJProcess(JProcessCreator *pCreator, dword dwProcID, byte byPriority, int nMsgLength, int nMsgSize, int nReqLength, int nReqSize) { JProcess *pJProcess = pCreator->CreateJProcess(dwProcID, byPriority); if (!pJProcess) return NULL; //添加进程队列 g_pJProcManage->AddProcess(pJProcess); //创建消息队列 if (!pJProcess->InitMsgManage(nMsgLength, nMsgSize)) return NULL; if (!pJProcess->InitReqManage(nReqLength, nReqSize)) return NULL; //初始化线程 if (!InitThreadJProcess(pJProcess)) return NULL; //延时重送事件 PostMessageWait(pJProcess->GetProcID(), EV_CREATE); return pJProcess; }