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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Опять о настройках (QSettings)  (Прочитано 5053 раз)
once_again_abc
Гость
« : Сентябрь 09, 2011, 03:20 »

Здравствуйте.

Есть некая переменная, к которой происходит обращение из разных потоков/мест программы для чтения и модификации. Также значение этой переменной необходимо сохранять после завершения приложения. Очевидно использование QSettings, но не очень очевидно его использование при высоких нагрузках - например когда один поток чрезвычайно часто читает эту переменную, а другой поток чрезвычайно редко может ее изменить по действию пользователя. Как такое грамотно реализовать?

Спасибо!
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Сентябрь 09, 2011, 06:48 »

В начале программы читать. В конце (QCoreApplication::aboutToQuit()) записывать.
Во время работы самый простой вариант - защищаться через QReadWriteLock +    QReadLocker + QWriteLocker.
Записан
asvil
Гость
« Ответ #2 : Сентябрь 09, 2011, 10:03 »

очевидно использования простой глобальной переменной с защитой для многопоточности.
Записан
once_again_abc
Гость
« Ответ #3 : Сентябрь 09, 2011, 11:00 »

В начале программы читать. В конце (QCoreApplication::aboutToQuit()) записывать.
Во время работы самый простой вариант - защищаться через QReadWriteLock +    QReadLocker + QWriteLocker.

не могу понять их пользу. как их использовать?
Записан
brankovic
Гость
« Ответ #4 : Сентябрь 09, 2011, 11:22 »

самый простой вариант - защищаться через QReadWriteLock + QReadLocker + QWriteLocker.

не могу понять их пользу. как их использовать?

польза в том, что много читателей не мешают друг другу
Записан
once_again_abc
Гость
« Ответ #5 : Сентябрь 09, 2011, 11:42 »

самый простой вариант - защищаться через QReadWriteLock + QReadLocker + QWriteLocker.

не могу понять их пользу. как их использовать?

польза в том, что много читателей не мешают друг другу

читатели, не мешающие другу другу штука совершенно тривиальная. меня интересует ситуация, когда в общий буфер очень быстро кусками пишутся данные, а читател/ь(и) относительно медленно из него кусками читают. куски для записи и для чтения разные по размеру. и я не понимаю как в этой ситуации может помочь использование QReadWriteLock. сейчас у меня реализовано все через обычный общий мьютекс по очень простому принципу - писатель блокирует сразу целый сегмент для себя, а читатели читаю по маленьким дискретным кусочкам, так что писателю не приходится долго ждать блокировки своего сегмента если там сейчас кто-то читает (соответственно, когда сегмент заблокирован писателем - читатели на следующей микроитерации либо идут лесом/дальше, либо терпеливо ждут). т.е. разная гранулярность записи и чтения.
Записан
brankovic
Гость
« Ответ #6 : Сентябрь 09, 2011, 12:01 »

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

вы просто начали с QSettings, я вас не понял, если честно. И что вас смущает в реализованной схеме, производительность или изящество решения?
Записан
once_again_abc
Гость
« Ответ #7 : Сентябрь 09, 2011, 12:38 »



вы просто начали с QSettings, я вас не понял, если честно. И что вас смущает в реализованной схеме, производительность или изящество решения?

начали с QSettings, закончили QReadWriteLock, после чего я попросил объяснить как эта штука реализована и, соответственно, как ею можно воспользоваться. Как использовать QSettings совместо с QReadWriteLock?

ПС. сейчас у меня есть класс, производный от QSettings, внутри которого я переопределил setValue & value, они возвращают соответствующие родительские вызовы, но с преварительно установленным QMutexLocker-ом
« Последнее редактирование: Сентябрь 09, 2011, 12:41 от once_again_abc » Записан
BRE
Гость
« Ответ #8 : Сентябрь 09, 2011, 12:48 »

Посмотри в документации три класса:
QReadWriteLock
QReadLocker
QWriteLocker

Ну а если останутся вопросы.... хотя они не должны остаться... Подмигивающий
Записан
once_again_abc
Гость
« Ответ #9 : Сентябрь 09, 2011, 12:58 »

Посмотри в документации три класса:
QReadWriteLock
QReadLocker
QWriteLocker

Ну а если останутся вопросы.... хотя они не должны остаться... Подмигивающий


вас понял. взлетаю =)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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