From cd787dbac9e789e63d81f8ab7241ca734faffb44 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 10 Jul 2020 14:12:33 +0200 Subject: 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 --- src/concurrent/qtconcurrentrunbase.h | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'src/concurrent/qtconcurrentrunbase.h') diff --git a/src/concurrent/qtconcurrentrunbase.h b/src/concurrent/qtconcurrentrunbase.h index 176097c04f7..c748d8e2b99 100644 --- a/src/concurrent/qtconcurrentrunbase.h +++ b/src/concurrent/qtconcurrentrunbase.h @@ -79,7 +79,7 @@ struct TaskStartParameters }; template -class RunFunctionTaskBase : public QFutureInterface , public QRunnable +class RunFunctionTaskBase : public QRunnable { public: QFuture start() @@ -89,10 +89,10 @@ public: QFuture start(const TaskStartParameters ¶meters) { - this->setThreadPool(parameters.threadPool); - this->setRunnable(this); - this->reportStarted(); - QFuture theFuture = this->future(); + promise.setThreadPool(parameters.threadPool); + promise.setRunnable(this); + promise.reportStarted(); + QFuture 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::reportException(e); + promise.reportException(e); } catch (...) { - QFutureInterface::reportException(QUnhandledException()); + promise.reportException(QUnhandledException()); } #endif reportResult(); - this->reportFinished(); + promise.reportFinished(); } protected: virtual void runFunctor() = 0; virtual void reportResult() {} + + QFutureInterface promise; }; template @@ -135,9 +137,9 @@ protected: void reportResult() override { if constexpr (std::is_move_constructible_v) - this->reportAndMoveResult(std::move(result)); + this->promise.reportAndMoveResult(std::move(result)); else if constexpr (std::is_copy_constructible_v) - this->reportResult(result); + this->promise.reportResult(result); } T result; -- cgit v1.2.3