Re[2]: Проблема при работе с std::queue.
От: .erax  
Дата: 09.11.04 11:47
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>Здравствуйте, .erax, Вы писали:


E>>P.S. При отключении сохранения пакетов в очередь, т.е. получаю и игнорирую его. Используя подключение типа LOOP_BACK скорость получения данных была в районе 200 MB в секунду время ядра 5-10%.


ssm>покажи

ssm>1.сохранение пакетов в очереди
ssm>2.цикл обработки сообщений из очереди

//////////////////////////////////////////////////////
int cMPPacketQueue::Push(SServerPacket *_packet)
{
size_t size;
assert(_packet);
try
{
size = m_packetQueue.size();
if(size <= m_QueueMaxLimit)
m_packetQueue.push(_packet);
else
return 0;
}
catch(...)
{
return 0;
}
return (int)size;
}

inline bool cMPPacketQueue::IsEmpty(){return m_packetQueue.empty();}
////////////////////////////////////////////////////////
while(isWorking)
{
mtserverClass->m_queue_mutex.LockMutex();
{
isEmpty = mtserverClass->m_queue.IsEmpty();
}
mtserverClass->m_queue_mutex.UnlockMutex();

if(!isEmpty)
{
mtserverClass->m_queue_mutex.LockMutex();
{
sp= mtserverClass->m_queue.Pop();
assert(sp);
}
mtserverClass->m_queue_mutex.UnlockMutex();
if(sp->spHeader.isRelayPacket)
mtserverClass->Send(sp);
else
mtserverClass->OnReceive( \
sp->spHeader.userIdFrom,
sp->spHeader.RawSize,
sp->lpData );
safe_delete(sp);

}
else
{
Sleep(1);
}
mtserverClass->m_server_info_mutex.LockMutex();
{
isWorking = mtserverClass->m_isWorking;
}
mtserverClass->m_server_info_mutex.UnlockMutex();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.