diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2020-07-10 14:12:33 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2020-07-14 14:52:08 +0200 |
commit | cd787dbac9e789e63d81f8ab7241ca734faffb44 (patch) | |
tree | 4e65df342fa0b5a80d6980ade19074a21583d1a0 /src/concurrent/qtconcurrentrunbase.h | |
parent | 97741a959026816071e8c6a4ac8e0a660aa08454 (diff) |
QtConcurrent: Get rid of multi-inheritance inside RunFunctionTaskBase
Use aggregation instead. Prepare for using QPromise instead of QFutureInterface.
Task-number: QTBUG-84702
Change-Id: Ic88564dca8c83a178a281cb843032292210a6d25
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Diffstat (limited to 'src/concurrent/qtconcurrentrunbase.h')
-rw-r--r-- | src/concurrent/qtconcurrentrunbase.h | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/concurrent/qtconcurrentrunbase.h b/src/concurrent/qtconcurrentrunbase.h index 176097c04f..c748d8e2b9 100644 --- a/src/concurrent/qtconcurrentrunbase.h +++ b/src/concurrent/qtconcurrentrunbase.h @@ -79,7 +79,7 @@ struct TaskStartParameters }; template <typename T> -class RunFunctionTaskBase : public QFutureInterface<T> , public QRunnable +class RunFunctionTaskBase : public QRunnable { public: QFuture<T> start() @@ -89,10 +89,10 @@ public: QFuture<T> start(const TaskStartParameters ¶meters) { - this->setThreadPool(parameters.threadPool); - this->setRunnable(this); - this->reportStarted(); - QFuture<T> theFuture = this->future(); + promise.setThreadPool(parameters.threadPool); + promise.setRunnable(this); + promise.reportStarted(); + QFuture<T> theFuture = promise.future(); parameters.threadPool->start(this, parameters.priority); return theFuture; } @@ -102,8 +102,8 @@ public: void run() override { - if (this->isCanceled()) { - this->reportFinished(); + if (promise.isCanceled()) { + promise.reportFinished(); return; } #ifndef QT_NO_EXCEPTIONS @@ -112,20 +112,22 @@ public: runFunctor(); #ifndef QT_NO_EXCEPTIONS } catch (QException &e) { - QFutureInterface<T>::reportException(e); + promise.reportException(e); } catch (...) { - QFutureInterface<T>::reportException(QUnhandledException()); + promise.reportException(QUnhandledException()); } #endif reportResult(); - this->reportFinished(); + promise.reportFinished(); } protected: virtual void runFunctor() = 0; virtual void reportResult() {} + + QFutureInterface<T> promise; }; template <typename T> @@ -135,9 +137,9 @@ protected: void reportResult() override { if constexpr (std::is_move_constructible_v<T>) - this->reportAndMoveResult(std::move(result)); + this->promise.reportAndMoveResult(std::move(result)); else if constexpr (std::is_copy_constructible_v<T>) - this->reportResult(result); + this->promise.reportResult(result); } T result; |