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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Базы данных и многопоточность  (Прочитано 3390 раз)
titan83
Гость
« : Октябрь 08, 2016, 12:03 »

Уважаемые коллеги, добрый день.
Чувствую, что пора сделать качественный переход - перестать морозить gui при запросах к базе. Причем меня даже не так беспокоят запросы, как замерзание gui при таймауте соединения с базой (у меня - 10 секунд).
Читал эту тему - http://www.prog.org.ru/topic_29315_0.html
Но остались вопросы:
1. Как грамотно работать с базой из разных классов?
У меня сейчас все запросы (около 20) собраны в одном одном классе, этот класс оформлен в виде синглтона, и остальные классы вызывают его методы. QString DB->userFullname(const QString& username), например.
2. Как вынести работу с БД в отдельный поток?
У меня сейчас в отдельном потоке (QtConcurrent) только открытие базы - работает нормально. По завершении шлет сигнал.
У меня реально запросы к базе делает только две функции: QString oneLineQuery(const QString& query) и QList<QSqlRecord> multiLineQuery(const QString& query), но можно все свести только к одной multiLineQuery.
И я пока не догоняю, как мне получать результат работы запроса: ведь пока выполняется запрос в отдельном потоке, то в основном мы уже будем где-то дальше от места вызова. Вполне возможно, что даже будет выполнен уже следующий запрос. Единственное, что приходит в голову это сигнал, где помимо результата, будет еще и id запроса, а уже в классах сопоставлять.
Спасибо все дочитавшим.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Октябрь 08, 2016, 20:01 »

можно открыть в новом потоке базу и ей слать запросы событием, по выполнению - ответ также событием
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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