QtConcurrent, non-blocking call?
Verfasst: 23. September 2015 20:02
Gibt es eine Möglichkeit, direkt (d.h. ohne Signal/Slot Verbindung) eine Funktion in einem anderen Thread aufzurufen, ohne dass mein aufrufender Thread an der Stelle blockiert? Ich will in etwa das folgende machen:
Jetzt wird SomeClass::doWork(...) zwar in einem anderen Thread ausgeführt, aber in meinem Hauptthread geht's auch erst weiter, wenn das Ergebnis von doWork vorliegt und damit waitForFinished() oder result() zurückkehren.
Üblicherweise würde man in doWork(...) ein Signal senden, wenn man fertig ist, dieses im Hauptthread wieder auffangen und dann weiterarbeiten. Das bedeutet dann auch, dass man alle Funktionen, die den obigen Codeschnipsel aufrufen, per Signal/Slot verbinden muss. Das geht, ist aber mit einem gewissen Aufwand verbunden und wie ich finde beim Lesen des Codes auch weniger transparent als ein Code, der in geschlossener Form arbeitet.
Ich meine, solch einen nicht blockierenden Aufruf wie oben beschrieben gibt's nicht. Falls ich da falsch liege, würde ich mich über eine Idee freuen, wie man's umsetzen kann.
Code: Alles auswählen
QFuture<int> f1 = QtConcurrent::run(&someClassInstance, &SomeClass::doWork, someParameter);
f1.waitForFinished();
// oder
int result = f1.result();
Üblicherweise würde man in doWork(...) ein Signal senden, wenn man fertig ist, dieses im Hauptthread wieder auffangen und dann weiterarbeiten. Das bedeutet dann auch, dass man alle Funktionen, die den obigen Codeschnipsel aufrufen, per Signal/Slot verbinden muss. Das geht, ist aber mit einem gewissen Aufwand verbunden und wie ich finde beim Lesen des Codes auch weniger transparent als ein Code, der in geschlossener Form arbeitet.
Ich meine, solch einen nicht blockierenden Aufruf wie oben beschrieben gibt's nicht. Falls ich da falsch liege, würde ich mich über eine Idee freuen, wie man's umsetzen kann.