crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> как удалять элемент в QStringList в многопоточной программе?
eldar85
  опции профиля:
сообщение 26.8.2010, 17:17
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


Проблема такая, каждый поток должен получать разные значения из 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
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


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


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Посмотри обсуждение: http://www.prog.org.ru/topic_14426_0.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 26.8.2010, 22:00
Сообщение #4


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 13:02