Название: Опять о настройках (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 Ну а если останутся вопросы.... хотя они не должны остаться... ;) вас понял. взлетаю =) |