[FileZilla Client 源码分析二]CCommandQueue类

CCommandQueue类

CCommandQueue类是一个消息池,用于处理界面发过来的ftp Command消息。


一、添加消息到消息池


m_CommandList.push_back(pCommand);
if (m_CommandList.size() == 1)
{
m_pState->NotifyHandlers(STATECHANGE_REMOTE_IDLE);
ProcessNextCommand();
}


这里需要注意m_CommandList.size() == 1的判断,需要与消息处理函数结合分析。


二、消息处理


while (!m_CommandList.empty())
{
CCommand *pCommand = m_CommandList.front();


int res = m_pEngine->Command(*pCommand);

.........

  }


这里使用了while循环,当list非空时会一直处理直到list为空。

结合添加消息的处理函数可以看出来,当while循环结束时,才会有m_CommandList.size() == 1的情况,这样会防止多个线程抛消息,导致消息重复处理。

这里有一个疑问,m_CommandList.push_back(pCommand);时没有加锁,如果是多线程的情况,会不会有问题?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值