Cześć,
Utworzyłem program który co jakiś czas wysyła na serwer pewne informacje.
Dane na serwerze są przetwarzane i serwer odpowiada, że jest ok albo nie ok.
Jak dane wracają do mojej aplikacji wywoływana jest metoda:
connect(networkManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(updateWwwOnFinish(QNetworkReply*)));
metoda updateWwwOnFinish zapisuje w bazie czas przyjścia odpowiedzi i wyświetla QMessageBox że jest ok lub nie ok.
Mój problem polega na tym, że czasem odpowiedź jest po kilku sekundach i jeśli aktualnie program wykonuję jakąś czynność to zawiesza cały komputer.
Np. mam w programie tabele z uruchomioną opcją drag and drop, jeśli złapie komórkę i zacznę ją przeciągać i w tym momencie przyjdzie odpowiedź to program się zawiesza.
Ten problem występuje tylko jeśli chce wyświetlić QMessageBox z informacją czy dane zostały poprawnie zapisane na serwerze, jeśli wyłączę pokazywanie QMessageBox cały kod wykonuje się bez problemu i nic się nie zawiesza nawet jeśli aktualnie używam drag and drop.
Chciałbym was zapytać czy w takiej sytuacji może pomóc użycie wątków? (nigdy ich nie używałem)
A może jest lepszy sposób aby sprawdzić czy program jest zajęty i ewentualnie nie pokazywać QMessageBox?
deleteLater
wszystkie eventy są przetwarzane. W jego przypadku musi się dziać coś dziwnego, albo opisał problem w niejasny sposób. Na 100% pokazywaniemsgBox.exec();
nie powinno blokować całego komputera. Czegoś jeszcze brakuje w jego opisie. Nie mam czasu tego analizować,