Example #1
0
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;
}