Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: TaIRou от Октябрь 29, 2012, 19:33



Название: Межпотоковое хранилище на основе QHash или QMap
Отправлено: TaIRou от Октябрь 29, 2012, 19:33
Ребят, нужно сделать межпотоковое хранилище данных на основе какого-нибудь контейнера (потоки могут читать данные, но они могут периодически обновляться), таким образом, чтобы данные были доступны и из gui-потока. Какие способы организации такого хранилища наиболее разумны в Qt?


Название: Re: Межпотоковое хранилище на основе QHash или QMap
Отправлено: Igors от Октябрь 29, 2012, 20:20
По-простому - контейнер (подходящий по задаче) + QReadWriteLock


Название: Re: Межпотоковое хранилище на основе QHash или QMap
Отправлено: TaIRou от Октябрь 30, 2012, 20:01
а какие +/- у QThreadStorage, примеров с его использованием в examples я не нашел. А из того, что написано в help не очень понятно нужно ли к нему дополнительно лепить mutex'ы?

вот код из справки, вроде несложная обертка
Код:
QThreadStorage<QCache<QString, SomeClass> *> caches;

 void cacheObject(const QString &key, SomeClass *object)
 {
     if (!caches.hasLocalData())
         caches.setLocalData(new QCache<QString, SomeClass>);

     caches.localData()->insert(key, object);
 }

 void removeFromCache(const QString &key)
 {
     if (!caches.hasLocalData())
         return;

     caches.localData()->remove(key);
 }


Название: Re: Межпотоковое хранилище на основе QHash или QMap
Отправлено: Igors от Октябрь 30, 2012, 20:13
а какие +/- у QThreadStorage, примеров с его использованием в examples я не нашел. А из того, что написано в help не очень понятно нужно ли к нему дополнительно лепить mutex'ы?

вот код из справки, вроде несложная обертка
QThreadStorage - это "наоборот" того что нужно "ребяту" :) Он хранит "личные" данные для каждой нитки, т.е. сохраненные в одной недоступны для другой


Название: Re: Межпотоковое хранилище на основе QHash или QMap
Отправлено: TaIRou от Октябрь 30, 2012, 20:22
Что-то как-то больно мудрено, а когда такое может пригодится то вообще?)
Как-то сразу в голову и не приходит... правда это к делу отношения не имеет, но все-таки


Название: Re: Межпотоковое хранилище на основе QHash или QMap
Отправлено: Igors от Октябрь 30, 2012, 20:29
Что-то как-то больно мудрено, а когда такое может пригодится то вообще?)
Как-то сразу в голову и не приходит... правда это к делу отношения не имеет, но все-таки
Когда QThreadStorage (конкректно этот класс) может пригодиться не скажу - не пользовал. А вообще создание "своих" данных для каждой нитки - основной метод распараллеливания, мутексы то так, поляпать когда думать неохота или нечем