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



1. при добавлении пакетов в очередь, надо ее блокировать. у тебя этим и не пахнет
2. std::queue не имеет метода Pop(), у нее есть front() и pop()
3. нафига столько блокировок в основном цикле? вот версия с критической секцией:


    bool bTask;
    while(!bFinish || !tasks.empty())
    {        
        

        bTask = !tasks.empty();
        if(bTask)
        {
            cs.Lock();
            if(!tasks.empty())
            {
                task = tasks.front();
                tasks.pop();            
            }            
            cs.Unlock();
        }
        

        if(task)
        {    
            
            //...
        }
        else
        {
            ::Sleep(50);
        }

    }


суть в том, чтобы входить в крит. секцию, только когда это действительно необходимо. а у тебя получется все время происходит синхронизация

4. в cMPPacketQueue::Push(SServerPacket *_packet) нужен семафор на m_QueueMaxLimit потоков
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.