5#ifndef QTCONCURRENT_RUN_H
6#define QTCONCURRENT_RUN_H
9#pragma qt_class(QtConcurrentRun)
12#include <QtConcurrent/qtconcurrentcompilertest.h>
14#if !defined(QT_NO_CONCURRENT) || defined(Q_QDOC)
16#include <QtConcurrent/qtconcurrentrunbase.h>
17#include <QtConcurrent/qtconcurrentstoredfunctioncall.h>
25namespace QtConcurrent {
28 QFuture<T> run(Function function, ...);
31 QFuture<T> run(QThreadPool *pool, Function function, ...);
39#define QTCONCURRENT_RUN_NODISCARD
40 Q_NODISCARD_X("Use QThreadPool::start(Callable&&) if you don't need the returned QFuture")
42template <
class Function,
class ...Args>
44auto run(QThreadPool *pool, Function &&f, Args &&...args)
46 DecayedTuple<Function, Args...> tuple { std::forward<Function>(f),
47 std::forward<Args>(args)... };
48 return TaskResolver<std::decay_t<Function>, std::decay_t<Args>...>::run(
49 std::move(tuple), TaskStartParameters { pool });
52template <
class Function,
class ...Args>
61template <
class Function,
class ...Args>
63auto run(Function &&f, Args &&...args)
65 return run(QThreadPool::globalInstance(), std::forward<Function>(f),
66 std::forward<Args>(args)...);
70template <
class PromiseType,
class Function,
class ...Args>
72auto run(QThreadPool *pool, Function &&f, Args &&...args)
74 return (
new StoredFunctionCallWithPromise<Function, PromiseType, Args...>(
75 std::forward<Function>(f), std::forward<Args>(args)...))->start(pool);
79template <
class PromiseType,
class Function,
class ...Args>
81auto run(Function &&f, Args &&...args)
83 return run<PromiseType>(QThreadPool::globalInstance(), std::forward<Function>(f),
84 std::forward<Args>(args)...);
87#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