4#ifndef QTCONCURRENT_RUN_H
5#define QTCONCURRENT_RUN_H
8#pragma qt_class(QtConcurrentRun)
11#include <QtConcurrent/qtconcurrentcompilertest.h>
13#if !defined(QT_NO_CONCURRENT) || defined(Q_QDOC)
15#include <QtConcurrent/qtconcurrentrunbase.h>
16#include <QtConcurrent/qtconcurrentstoredfunctioncall.h>
24namespace QtConcurrent {
27 QFuture<T> run(Function function, ...);
30 QFuture<T> run(QThreadPool *pool, Function function, ...);
38#define QTCONCURRENT_RUN_NODISCARD
39 Q_NODISCARD_X("Use QThreadPool::start(Callable&&) if you don't need the returned QFuture")
41template <
class Function,
class ...Args>
43auto run(QThreadPool *pool, Function &&f, Args &&...args)
45 DecayedTuple<Function, Args...> tuple { std::forward<Function>(f),
46 std::forward<Args>(args)... };
47 return TaskResolver<std::decay_t<Function>, std::decay_t<Args>...>::run(
48 std::move(tuple), TaskStartParameters { pool });
51template <
class Function,
class ...Args>
60template <
class Function,
class ...Args>
62auto run(Function &&f, Args &&...args)
64 return run(QThreadPool::globalInstance(), std::forward<Function>(f),
65 std::forward<Args>(args)...);
69template <
class PromiseType,
class Function,
class ...Args>
71auto run(QThreadPool *pool, Function &&f, Args &&...args)
73 return (
new StoredFunctionCallWithPromise<Function, PromiseType, Args...>(
74 std::forward<Function>(f), std::forward<Args>(args)...))->start(pool);
78template <
class PromiseType,
class Function,
class ...Args>
80auto run(Function &&f, Args &&...args)
82 return run<PromiseType>(QThreadPool::globalInstance(), std::forward<Function>(f),
83 std::forward<Args>(args)...);
86#undef QTCONCURRENT_RUN_NODISCARD
QTCONCURRENT_RUN_NODISCARD auto run(QThreadPool *pool, Function &&f, Args &&...args)
QTCONCURRENT_RUN_NODISCARD auto run(Function &&f, Args &&...args)
QTCONCURRENT_RUN_NODISCARD auto run(QThreadPool *pool, std::reference_wrapper< const Function > &&functionWrapper, Args &&...args)
#define QTCONCURRENT_RUN_NODISCARD