Cześć, w swojej aplikacji uruchomiłem drugi wątek, który wykonuje zapytanie do bazy danych:
QSqlQuery query(...);
query.exec(...)
Ten drugi wątek, po spełnieniu warunku wysyła sygnał do głównego wątku. Tam również wykonuje się podobne zapytanie do tej samej bazy danych.
W tym momencie program wykonuje niespodziewane działanie. W głównym wątku nowy wątek tworzę mniej więcej tak:
void JupiterWindow::makeThread()
{
FriendsStatuses *friendsStatuses = new FriendsStatuses();
QThread *thread = new QThread;
friendsStatuses->moveToThread(thread);
QObject::connect(thread, &QThread::started, friendsStatuses, &FriendsStatuses::run);
QObject::connect(friendsStatuses, &FriendsStatuses::statusChanged, this, &JupiterWindow::updateFriendsList);
thread->start();
}
Bez odwołania do bazy danych w głównym wątku wszystko jest ok. Czy muszę zastosować tu blokadę coś w rodzaju QMutex? Jakie obiekty muszę utworzyć w głównym wątku, żeby to zadziałało? Na ten moment próbowałem w drugim wątku zrobić blokadę w trakcie wywołania zapytania, ale chyba brakuje mi czegoś w głównym wątku?
// DRUGI WĄTEK
QMutex mutex;
mutex.lock();
// zapytanie do bazy danych
mutex.unlock();
Jakie jest najrozsądniejsze rozwiązanie tego problemu? Natknąłem się też na QThreadPool czy QReadWriteLock. Jak to ugryźć?