[gelöst] qApp->processEvents() aus Thread ausführen
Verfasst: 1. Februar 2010 18:52
Hallo,
ich habe in nem Programm ne Ausgabefunktion die einfach Warnungen und Fehlermeldungen in ein TableModel schreibt. Damit ich die Ausgabe auch schon während einer länger laufenden Funktion seh ruf ich darin schön qApp->processEvents() auf, was auch gut funktioniert. Ich mach das so und nicht mit einem extra Worker-Thread, da man solange die Funktion läuft eh nicht mit dem Programm interagieren soll.
Jetzt hab ich aber einen Teil der Funktion mit QtConcurrent::run parallelisiert, und die Ausgabe-Aufrufe aus diesem parallelisierten Teil werden eben nicht direkt angezeigt, sondern erst wenn alle runs abgearbeitet sind (Die Funktion wartet am Ende mit QThreadPool::globalInstance()->waitForDone(); auf die runs).
Funktioniert qApp->processEvents() aus einem Thread heraus nicht? Oder was läuft da schief? Ich hab jetzt schon ne Weile rumgesucht aber nix gefunden. Ich bräuchte halt ne Lösung die sowohl bei einem seriellen Aufruf als auch bei einem Aufruf aus einem Thread heraus funktioniert.
Hier mal die Ausgabe-Funktion
ich habe in nem Programm ne Ausgabefunktion die einfach Warnungen und Fehlermeldungen in ein TableModel schreibt. Damit ich die Ausgabe auch schon während einer länger laufenden Funktion seh ruf ich darin schön qApp->processEvents() auf, was auch gut funktioniert. Ich mach das so und nicht mit einem extra Worker-Thread, da man solange die Funktion läuft eh nicht mit dem Programm interagieren soll.
Jetzt hab ich aber einen Teil der Funktion mit QtConcurrent::run parallelisiert, und die Ausgabe-Aufrufe aus diesem parallelisierten Teil werden eben nicht direkt angezeigt, sondern erst wenn alle runs abgearbeitet sind (Die Funktion wartet am Ende mit QThreadPool::globalInstance()->waitForDone(); auf die runs).
Funktioniert qApp->processEvents() aus einem Thread heraus nicht? Oder was läuft da schief? Ich hab jetzt schon ne Weile rumgesucht aber nix gefunden. Ich bräuchte halt ne Lösung die sowohl bei einem seriellen Aufruf als auch bei einem Aufruf aus einem Thread heraus funktioniert.
Hier mal die Ausgabe-Funktion
Code: Alles auswählen
void MainWindow::messageHandler(QtMsgType type, const char *msg) {
mutex->lock();
logModel->addEntry(int(type), QString(msg));
qApp->processEvents();
mutex->unlock();
}