From ed8e1ccc3522d9cbbd2d751d1a4a66b1ebe21390 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Thu, 26 Aug 2021 16:42:17 +0200 Subject: FutureUtils: Add await() function --- src/base/QXmppFutureUtils_p.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src') diff --git a/src/base/QXmppFutureUtils_p.h b/src/base/QXmppFutureUtils_p.h index 531d52e3..720e6df4 100644 --- a/src/base/QXmppFutureUtils_p.h +++ b/src/base/QXmppFutureUtils_p.h @@ -82,6 +82,30 @@ inline QFuture makeReadyFuture() return QFutureInterface(State(State::Started | State::Finished)).future(); } +template +void await(const QFuture &future, QObject *context, Handler handler) +{ + auto *watcher = new QFutureWatcher(context); + QObject::connect(watcher, &QFutureWatcherBase::finished, + context, [watcher, handler { std::move(handler) }]() { + handler(watcher->result()); + watcher->deleteLater(); + }); + watcher->setFuture(future); +} + +template +void await(const QFuture &future, QObject *context, Handler handler) +{ + auto *watcher = new QFutureWatcher(context); + QObject::connect(watcher, &QFutureWatcherBase::finished, + context, [watcher, handler { std::move(handler) }]() { + handler(); + watcher->deleteLater(); + }); + watcher->setFuture(future); +} + template auto chain(QFuture &&source, QObject *context, Converter task) -> QFuture { -- cgit v1.2.3