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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как лучше спроектировать при работе с потоками  (Прочитано 4247 раз)
vebmaster
Новичок

Offline Offline

Сообщений: 47


Просмотр профиля
« : Февраля 02, 2017, 12:36 »

Здравствуйте.
Делаю программу, которая будет работать с mysql в многопоточном режиме, потоков может быть много и 5 и 10 и 100. В каждом потоке будет обращение на чтение/запись к базе.
+ обращение будет из других объектов классов.
Сейчас имеется отдельный класс "mySql" (в нём устанавливается соединение с базой и прописаны все функции с запросами), экземпляр которого создаётся в рабочем классе, объект которого и помещается в поток. Но так же требуется работать с базой в других классах.

Не знаю как правильно спроектировать программу для работы с базой. Правильно ли я сделал или нет? Или лучше использовать 1 соединение (static QSqlDatabase db) на всю программу или это всё мелочи?
Записан
vebmaster
Новичок

Offline Offline

Сообщений: 47


Просмотр профиля
« Ответ #1 : Февраля 02, 2017, 15:52 »

ответ на мой вопрос описан в http://www.prog.org.ru/topic_29975_0.html
всё правильно сделал
Записан
vebmaster
Новичок

Offline Offline

Сообщений: 47


Просмотр профиля
« Ответ #2 : Февраля 06, 2017, 14:37 »

И всё таки переделал на работу с одним соединением.
Т.к. QSqlDatabase уже синглтон, то достаточно заменить
Код:
db = QSqlDatabase::addDatabase("QMYSQL");
на
Код:
    if (QSqlDatabase::contains(QSqlDatabase::defaultConnection))
        db = QSqlDatabase::database();
    else
        db = QSqlDatabase::addDatabase("QMYSQL");

а в заголовочном файле даже не нужен static
Код:
QSqlDatabase db;
« Последнее редактирование: Февраля 06, 2017, 17:26 от vebmaster » Записан
vebmaster
Новичок

Offline Offline

Сообщений: 47


Просмотр профиля
« Ответ #3 : Февраля 09, 2017, 13:34 »

для тех кто наткнулся на данный топик.
Инициализацию QSqlDatabase объекта делаем один раз в конструкторе.
Если планируется несколько соединений из разных потоков, для каждого потока всё такие лучше создавать отдельное именованное соединение.
Соединяться с базой надо прям перед запросом (exec()) и после запроса закрывать соединение.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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