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);时没有加锁,如果是多线程的情况,会不会有问题?