diff options
Diffstat (limited to 'src/libs/utils/asynctask.h')
-rw-r--r-- | src/libs/utils/asynctask.h | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/src/libs/utils/asynctask.h b/src/libs/utils/asynctask.h deleted file mode 100644 index 1a6ae7d1b6..0000000000 --- a/src/libs/utils/asynctask.h +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include "utils_global.h" - -#include "futuresynchronizer.h" -#include "qtcassert.h" -#include "runextensions.h" -#include "tasktree.h" - -#include <QFutureWatcher> - -namespace Utils { - -class QTCREATOR_UTILS_EXPORT AsyncTaskBase : public QObject -{ - Q_OBJECT - -signals: - void started(); - void done(); -}; - -template <typename ResultType> -class AsyncTask : public AsyncTaskBase -{ -public: - AsyncTask() { connect(&m_watcher, &QFutureWatcherBase::finished, this, &AsyncTaskBase::done); } - ~AsyncTask() - { - if (isDone()) - return; - - m_watcher.cancel(); - if (!m_synchronizer) - m_watcher.waitForFinished(); - } - - using StartHandler = std::function<QFuture<ResultType>()>; - - template <typename Function, typename ...Args> - void setAsyncCallData(const Function &function, const Args &...args) - { - m_startHandler = [=] { - return Utils::runAsync(m_threadPool, m_priority, function, args...); - }; - } - void setFutureSynchronizer(FutureSynchronizer *synchorizer) { m_synchronizer = synchorizer; } - void setThreadPool(QThreadPool *pool) { m_threadPool = pool; } - void setPriority(QThread::Priority priority) { m_priority = priority; } - - void start() - { - QTC_ASSERT(m_startHandler, qWarning("No start handler specified."); return); - m_watcher.setFuture(m_startHandler()); - emit started(); - if (m_synchronizer) - m_synchronizer->addFuture(m_watcher.future()); - } - - bool isDone() const { return m_watcher.isFinished(); } - bool isCanceled() const { return m_watcher.isCanceled(); } - - QFuture<ResultType> future() const { return m_watcher.future(); } - ResultType result() const { return m_watcher.result(); } - QList<ResultType> results() const { return future().results(); } - bool isResultAvailable() const { return future().resultCount(); } - -private: - StartHandler m_startHandler; - FutureSynchronizer *m_synchronizer = nullptr; - QThreadPool *m_threadPool = nullptr; - QThread::Priority m_priority = QThread::InheritPriority; - QFutureWatcher<ResultType> m_watcher; -}; - -template <typename ResultType> -class AsyncTaskAdapter : public Tasking::TaskAdapter<AsyncTask<ResultType>> -{ -public: - AsyncTaskAdapter() { - this->connect(this->task(), &AsyncTaskBase::done, this, [this] { - emit this->done(!this->task()->isCanceled()); - }); - } - void start() final { this->task()->start(); } -}; - -} // namespace Utils - -QTC_DECLARE_CUSTOM_TEMPLATE_TASK(Async, AsyncTaskAdapter); |