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