Russian Qt Forum

Qt => Вопросы новичков => Тема начата: once_again_abc от Сентябрь 09, 2011, 03:20



Название: Опять о настройках (QSettings)
Отправлено: once_again_abc от Сентябрь 09, 2011, 03:20
Здравствуйте.

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

Спасибо!


Название: Re: Опять о настройках (QSettings)
Отправлено: LisandreL от Сентябрь 09, 2011, 06:48
В начале программы читать. В конце (QCoreApplication::aboutToQuit()) записывать.
Во время работы самый простой вариант - защищаться через QReadWriteLock +    QReadLocker + QWriteLocker.


Название: Re: Опять о настройках (QSettings)
Отправлено: asvil от Сентябрь 09, 2011, 10:03
очевидно использования простой глобальной переменной с защитой для многопоточности.


Название: Re: Опять о настройках (QSettings)
Отправлено: once_again_abc от Сентябрь 09, 2011, 11:00
В начале программы читать. В конце (QCoreApplication::aboutToQuit()) записывать.
Во время работы самый простой вариант - защищаться через QReadWriteLock +    QReadLocker + QWriteLocker.

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


Название: Re: Опять о настройках (QSettings)
Отправлено: brankovic от Сентябрь 09, 2011, 11:22
самый простой вариант - защищаться через QReadWriteLock + QReadLocker + QWriteLocker.

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

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


Название: Re: Опять о настройках (QSettings)
Отправлено: once_again_abc от Сентябрь 09, 2011, 11:42
самый простой вариант - защищаться через QReadWriteLock + QReadLocker + QWriteLocker.

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

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

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


Название: Re: Опять о настройках (QSettings)
Отправлено: brankovic от Сентябрь 09, 2011, 12:01
сейчас у меня реализовано все через обычный общий мьютекс по очень простому принципу - писатель блокирует сразу целый сегмент для себя, а читатели читаю по маленьким дискретным кусочкам, так что писателю не приходится долго ждать блокировки своего сегмента если там сейчас кто-то читает (соответственно, когда сегмент заблокирован писателем - читатели на следующей микроитерации либо идут лесом/дальше, либо терпеливо ждут). т.е. разная гранулярность записи и чтения.

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


Название: Re: Опять о настройках (QSettings)
Отправлено: once_again_abc от Сентябрь 09, 2011, 12:38


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

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

ПС. сейчас у меня есть класс, производный от QSettings, внутри которого я переопределил setValue & value, они возвращают соответствующие родительские вызовы, но с преварительно установленным QMutexLocker-ом


Название: Re: Опять о настройках (QSettings)
Отправлено: BRE от Сентябрь 09, 2011, 12:48
Посмотри в документации три класса:
QReadWriteLock
QReadLocker
QWriteLocker

Ну а если останутся вопросы.... хотя они не должны остаться... ;)


Название: Re: Опять о настройках (QSettings)
Отправлено: once_again_abc от Сентябрь 09, 2011, 12:58
Посмотри в документации три класса:
QReadWriteLock
QReadLocker
QWriteLocker

Ну а если останутся вопросы.... хотя они не должны остаться... ;)


вас понял. взлетаю =)