Модуль QSql и многопоточное приложение

Меня беспокоит, как модуль Sql работает с многопоточным приложением в Qt. http://doc.qt.io/qt-5/threads-modules.html#threads-and-the-sql-module четко указывает { {1}} что «Соединение можно использовать только из потока, который его создал».

Однако этот фрагмент кода, который я написал, работает:

#include 
#include 
#include 

void    req()
{
  QSqlQuery q("INSERT INTO users (username) VALUES (\"test\")");
}

void    db()
{
  QSqlDatabase _db;

  _db = QSqlDatabase::addDatabase("QMYSQL");
  _db.setDatabaseName("dbname");
  _db.setHostName("host");
  _db.setUserName("username");
  _db.setPassword("password");
  if (_db.open())
    std::cout << "Ok" << std::endl;
  else
    std::cout << "Error" << std::endl;
}

int     main(int ac, char **av)
{
  QCoreApplication app(ac, av);
  QtConcurrent::run(db);
  sleep(1);
  QtConcurrent::run(req);
  return app.exec();
}

Дизайн моего приложения требует, чтобы несколько потоков взаимодействовали с базой данных. Это потоки порождаются и управляются QtConcurrent :: run ().

Итак, поскольку этот фрагмент кода работает, следует ли мне использовать его или я столкнусь с проблемами при этом?

Любая помощь, документация или объяснение приветствуются! Спасибо.

5
задан Christophe Weis 23 November 2015 в 12:15
поделиться