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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как лучше спроектировать при работе с потоками  (Прочитано 4142 раз)
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.046 секунд. Запросов: 22.