From bb4bf1cd1ea2dec38329c65a4565d28e674ff23b Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Fri, 27 Aug 2021 22:07:26 +0200 Subject: FutureUtils: Add awaitLast using last future result --- src/base/QXmppFutureUtils_p.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src') diff --git a/src/base/QXmppFutureUtils_p.h b/src/base/QXmppFutureUtils_p.h index 720e6df4..0cad95f5 100644 --- a/src/base/QXmppFutureUtils_p.h +++ b/src/base/QXmppFutureUtils_p.h @@ -82,6 +82,19 @@ inline QFuture makeReadyFuture() return QFutureInterface(State(State::Started | State::Finished)).future(); } +template +void awaitLast(const QFuture &future, QObject *context, Handler handler) +{ + auto *watcher = new QFutureWatcher(context); + QObject::connect(watcher, &QFutureWatcherBase::finished, + context, [watcher, handler { std::move(handler) }]() { + auto future = watcher->future(); + handler(future.resultAt(future.resultCount() - 1)); + watcher->deleteLater(); + }); + watcher->setFuture(future); +} + template void await(const QFuture &future, QObject *context, Handler handler) { -- cgit v1.2.3