Russian Qt Forum
Ноябрь 26, 2024, 06:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ из разных потоков к объектам типа QList :help:  (Прочитано 5177 раз)
yesrus
Гость
« : Сентябрь 26, 2009, 15:37 »

Здравствуйте! Вообщем проблема в следующем:
Есть структуры+пара переменных:
Код
C++ (Qt)
       struct songs {
       QString file;
       int disk;
       int track;
       } ;
 
       QList<songs> slist;
 
       struct dsk {
       int firsttrack;
       int lasttrack;
       int lasttime;
       } disks[10];
 
       int posit, cutrack;
Как сделать так, чтобы они были доступны из разных потоков ? т.е. чтобы можно было изменить или прочитать\записать данных в них из разных потоков, так же интересует как переделать их в класс.
Почитал про глобальные переменные, но если объявить их глобально то qt ругается, так же не понятно как сделать аналог disks[10] - если структуру dsk объявить не структурой, а классом(имя класса к примеру myclass) - myclass[10] -правильно ли это? Возможно ли сделать динамическую структуру...т.е. без указания начально размера (10) ?
Заранее спасибо за помощь!
qt 4.5, windows xp sp3.
Записан
yesrus
Гость
« Ответ #1 : Сентябрь 26, 2009, 16:03 »

Небольшое дополнение: все это нужно, чтобы передать данные между потоками - я могу сделать это с помощью сигналов, но не могу понять как передать QList типа QList<songs> slist где songs - структура - как объявить этот qlist в дочернем потоке, чтобы потом через сигнал можно было его передать ? И вообще как передать любой объект типа QList с помощью сигнала ?
« Последнее редактирование: Сентябрь 26, 2009, 16:09 от yesrus » Записан
yesrus
Гость
« Ответ #2 : Сентябрь 26, 2009, 16:42 »

help....передавать из другого потока сигналами 1000+ переменных не айс....  Грустный
Записан
BlackTass
Гость
« Ответ #3 : Сентябрь 26, 2009, 20:14 »

Толи у меня под конец субботы плохо с понималкой толи еще что-то, но я не понял в чем проблема.
В передаче кулиста в сигнале? Должен нормально передаваться, но не забудьте зарегестрировать такой тип, чтобы куте о нем знал. В этом поможет метод qRegisterMetaType<TypeName>("TypeName").
В синхронизации данных между потоками? В этом случае вам поможет QMutex, либо другие средства синхронизации.
Записан
SimpleSunny
Гость
« Ответ #4 : Сентябрь 26, 2009, 22:41 »

Для хранения переменных можно сделать некий класс хранилище, в котором уже и заботится о защите данных (QMutex, QReadWriteLock, /etc). Этот класс создается перед запуском потоков, а в потоки просто передаем ссылку на класс с уже заполнеными данными.

Код
C++ (Qt)
class storage
{
public:
QString getString();
void putString(const QString &st);
 
protected:
QList <QString> list;
QReadWriteLock lock;
}
Записан
yesrus
Гость
« Ответ #5 : Сентябрь 26, 2009, 22:57 »

А как передать ссылку на класс в потоки ? И где его создавать этот класс ? (по дефолту есть mainwindow класс, он основной).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.118 секунд. Запросов: 20.