Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ как удалять элемент в QStringList в многопоточной программе?

Автор: eldar85 26.8.2010, 17:17

Проблема такая, каждый поток должен получать разные значения из QStringList list;

void Thread::run()
{
    
    end = list.length();

    while(end != 0)
    {
        QString str = list[0];

        emit showT(QString::number(end).append("  ").append(str));

       list.removeAt(0);
        end = list.length();
        Sleep(100);
    }

}

QStringList list пренадлежит классу Thread и хотелось бы чтобы к примеру в list было 105 элементов и при запущенных 10 потоках каждый поток брал один элемент себе, сразу удаляя его из list чтобы остальные потоки не могли из него взять это значение. Как только он обработал это значение берет следующее которое ему достанется, а если не осталось то завершает работу и так все потоки.
но у меня получается что каждый поток берет к себе одно и тоже значение и только потом это значение удаляется...

Автор: Алексей1153 26.8.2010, 17:22

eldar85, пусть QStringList list будет статическим членом класса, а также ещё добавь статический мутекс-член класса (венее, лучше локер, а не мутекс). Сделай статическую же функцию в классе, которая принимает параметры-флаги о действии (добавить, удалить, ...) а в начале этой функции защёлкивай локер. Будет красиво :)

Автор: BRE 26.8.2010, 17:32

Посмотри обсуждение: http://www.prog.org.ru/topic_14426_0.html

Автор: eldar85 26.8.2010, 22:00

большое спасибо за помощь) проблема оказалась тривиальной, не учел одну вещь, при запуске потоков в основном потоке в цикле передавал значения с каждым запуском потока и получается что одно и тоже значение передавалось пока не все потоки не запустятся)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)