@knasan said in Klassen Funktion mit Parameter und Rückgabewert in ein Thread ausführen.:
Was ich Interessiert, warum du genau diese Reihenfolge empfiehlst, was ist die Vor- und Nachteile usw.
Der vorgesehene Weg für ein multithreaded Programm ist der Weg über QThread.
Es gibt im Prinzip 2 Möglichkeiten wie man mit QThread arbeitet. Die beste, und empfohlene, version ist der Worker-Object.
Hat den Vorteil du packst deine lange Operation/Funktionen einfach in ihre eigene Klasse, und kommunizierst mit ihr über Signal und Slots. Wenn alles so funktioniert wie du es willst, gehst du hin und schiebst diese Klasse einfach über moveToThread in ihren eigenen QThread und du bist fertig.
Kein tieferes Wissen über Qt oder multithreading, mutex, shared data etc nötig.
Version 2 ist QThread subclass. Funktioniert ähnlich wie der Worker, nur das deine Basis Klasse QThread anstatt QObject ist.
Nachteil, es ist super einfach was falsch zu machen, Objekte müssen in run erstellt werden, sonst leben sie im falschen Thread. Man darf nicht vergessen exec() aufzurufen, oder Signal&Slot funktionieren nicht richtig etc. pp
QtConcurrent ist nochmal eine ebene Höher als QThread, es managed automatisch die threads in einem Threadpool. D.h die Anzahl der Threads passt sich der Anzahl der Kerne automatisch an, und du must das nicht per hand machen.
Es ist mehr dazu gedacht das du es auf container anwendest, für filter, maping etc.
Es ist sein eigenes Modul, und du musst es explicit in der *.pro file verlinken
QThread:.create ist im Prinzip ein Qt-wrapper für std::async
Es ist nicht dafür gedacht Klassen Funktionen aufzurufen, der einzige Grund, warum es bei dir und in meinem Beispiel funktioniert, ist die Nutzung des Lambdas.
Und das ist eigentlich gecheated ;)