diff options
| author | Linus Jahn <lnj@kaidan.im> | 2021-08-26 16:42:17 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-08-26 16:42:17 +0200 |
| commit | ed8e1ccc3522d9cbbd2d751d1a4a66b1ebe21390 (patch) | |
| tree | 3905113c068e8df03e83653fd95fc298648b453e /src | |
| parent | df4d7a98d8172754e53b2a3e74f239b76f05f8bc (diff) | |
| download | qxmpp-ed8e1ccc3522d9cbbd2d751d1a4a66b1ebe21390.tar.gz | |
FutureUtils: Add await() function
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/QXmppFutureUtils_p.h | 24 |
1 files changed, 24 insertions, 0 deletions
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<void> makeReadyFuture() return QFutureInterface<void>(State(State::Started | State::Finished)).future(); } +template<typename T, typename Handler> +void await(const QFuture<T> &future, QObject *context, Handler handler) +{ + auto *watcher = new QFutureWatcher<T>(context); + QObject::connect(watcher, &QFutureWatcherBase::finished, + context, [watcher, handler { std::move(handler) }]() { + handler(watcher->result()); + watcher->deleteLater(); + }); + watcher->setFuture(future); +} + +template<typename Handler> +void await(const QFuture<void> &future, QObject *context, Handler handler) +{ + auto *watcher = new QFutureWatcher<void>(context); + QObject::connect(watcher, &QFutureWatcherBase::finished, + context, [watcher, handler { std::move(handler) }]() { + handler(); + watcher->deleteLater(); + }); + watcher->setFuture(future); +} + template<typename Result, typename Input, typename Converter> auto chain(QFuture<Input> &&source, QObject *context, Converter task) -> QFuture<Result> { |
