QtConcurrent::run, , :
struct Bar {
int doStuff(int a, b) {
QThread::sleep(3);
return a+b+42;
}
};
class Foo : public QObject {
Q_OBJECT
Bar _bar;
public:
void startStuff(int a, int b) {
QtConcurrent::run([a,b,this]{
auto result = _bar.doStuff(a,b);
emit stuffDone(result);
});
}
Q_SIGNAL void stuffDone(int sum);
};
Foo QFutureWatcher, IMHO , , - , .
QSharedPointer<Bar> bar { new Bar };
auto watcher = new QFutureWatcher<int>;
connect(watcher, &QFutureWatcher::finished, watcher, [watcher, bar]{
watcher->deleteLater();
int result = watcher->result();
});
auto future = QtConcurrent::run(&Bar::doStuff, bar, 1, 2);
watcher->setFuture(future);
, "" , , , . , QThread::[|m|u]sleep.