Название: Доступ к централизованным данным Отправлено: once_again_abc от Сентябрь 27, 2011, 16:17 Есть некие настройки, к которым надо обращаться из разных классов и потоков. Классы ничего друг о друге не знают. Естественно хочется иметь одну единственную переменную, содержащую настройки вместо дублирования информации в каждом классе. Так же хочется, чтобы класс работал с актуальными данными, т.е. настройки должны быть некой глобальной переменной по отношению к классам-пользователям, а сами классы должны использовать какой-то унифицированный интерфейс для доступа к настройкам. как это в С++ грамотно решается? не хочется изобретать велосипед...
Название: Re: Доступ к централизованным данным Отправлено: Rem Norton от Сентябрь 27, 2011, 16:54 Если настройки читаются из файла или реестра, то можно например вот так:
Код
Название: Re: Доступ к централизованным данным Отправлено: ecspertiza от Сентябрь 27, 2011, 19:46 Смотри в сторону синглтона, для настроек самое оно.
Название: Re: Доступ к централизованным данным Отправлено: asvil от Сентябрь 27, 2011, 21:40 глобальная переменная. па-баааааааам.
Название: Re: Доступ к централизованным данным Отправлено: once_again_abc от Сентябрь 28, 2011, 00:04 а паттерн flyweight не то? особенно с учетом того, что настроек ну просто очень много...
Название: Re: Доступ к централизованным данным Отправлено: once_again_abc от Сентябрь 28, 2011, 00:19 хотя, в принципе, подход который я использовал с самого начала является самым правильным. если это не так, поправьте.
я создал свой класс-синглтон (наследник QSettings) в котором реализована потокова безопасность, а в остальном класс просто перенаправляет запросы родительскому классу. вопрос в том, насколько быстро происходит обращение и не является ли такой подход ошибкой если к данным идет очень частое обращение из разных классов и потоков? Название: Re: Доступ к централизованным данным Отправлено: ecspertiza от Сентябрь 28, 2011, 09:20 Добавь в свой класс настроек еще и кеширование. При записи настройки пишешь ее в кэш и в файл(допустим) при чтении проверяешь если нет в кэше берешь из файла и опять же пишешь в кеш. Это прилично ускорит работу с настройками, и ты будешь знать что для получения одной настройки софтина максимум 1 раз обратиться к файлу.
Название: Re: Доступ к централизованным данным Отправлено: Igors от Сентябрь 28, 2011, 09:42 Добавь в свой класс настроек еще и кеширование. Это создаст трудные (а может и неразрешимые) проблемы с "многопоточностью", т.к. Qt кэш не thread-safeя создал свой класс-синглтон (наследник QSettings) в котором реализована потокова безопасность, а в остальном класс просто перенаправляет запросы родительскому классу. Мне неизвестен какой-то стандартный/канонический способ. Если Вы только читаете установки - то вообще нет проблемы, никакие мутексы не нужны. Если же еще и пишете - ну тогда непонятно, а устроит ли Вас изменение параметра "на ходу", когда он уже прочитан одной или более нитками. Более определенно можно сказать имея конкретный пример использования. вопрос в том, насколько быстро происходит обращение и не является ли такой подход ошибкой если к данным идет очень частое обращение из разных классов и потоков? Название: Re: Доступ к централизованным данным Отправлено: ecspertiza от Сентябрь 28, 2011, 10:26 Цитировать Это создаст трудные (а может и неразрешимые) проблемы с "многопоточностью", т.к. Qt кэш не thread-safe а мьютексы тут не помогут ? Название: Re: Доступ к централизованным данным Отправлено: Igors от Сентябрь 28, 2011, 10:51 а мьютексы тут не помогут ? Да скорее навредят (если речь о QMutex)Название: Re: Доступ к централизованным данным Отправлено: ecspertiza от Сентябрь 28, 2011, 11:10 да, о них, не так часто с ними работал, решил уточнить. Вроде же была какая то возможность запретить доступ к переменной если ее уже кто то юзает.... совсем забыл
|