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