64,637
社区成员
发帖
与我相关
我的任务
分享
//提交命令,由外面调用
void CCmd::PostCmd(int nCmdType, void* pCmdData, int nCmdLength)
{
if(!pCmdData || nCmdLength<1)
return;
CAutoLock al(&m_csListCmd);
TRACE(, "提交一条命令,命令类型为%d,长度为%d", nCmdType, nCmdLength);
//创建新的命令
PCMD pCmd = new CMD;
pCmd->nCmdType = nCmdType;
pCmd->pCmdData = new BYTE[nCmdLength];
memcpy(pCmd->pCmdData, pCmdData, nCmdLength);
pCmd->nCmdLength = nCmdLength;
//将命令添加到列队
m_listCmd.push_front(pCmd);
}
//处理事件 在线程函数里调用
void CCmd::ProcessCmd()
{
CAutoLock al(&m_csListCmd);
if(m_listCmd.empty())
return;
//取出一条命令
PCMD pCmd = m_listCmd.back();
m_listCmd.pop_back();
TRACE("收到一条命令,命令类型为%d,长度为%d", pCmd->nCmdType, pCmd->nCmdLength);
//分析命令
switch(pCmd->nCmdType)
{
/*处理命令**/
}
TRACE("删除命令前");
//销毁命令
delete []pCmd->pCmdData;
TRACE("删除命令中");
delete pCmd;
TRACE("删除命令");
}