Меня беспокоит, как модуль 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 ().
Итак, поскольку этот фрагмент кода работает, следует ли мне использовать его или я столкнусь с проблемами при этом?
Любая помощь, документация или объяснение приветствуются! Спасибо.