Russian Qt Forum

Qt => Базы данных => Тема начата: titan83 от Октябрь 08, 2016, 12:03



Название: Базы данных и многопоточность
Отправлено: 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 запроса, а уже в классах сопоставлять.
Спасибо все дочитавшим.


Название: Re: Базы данных и многопоточность
Отправлено: qate от Октябрь 08, 2016, 20:01
можно открыть в новом потоке базу и ей слать запросы событием, по выполнению - ответ также событием