20#include <QtCore/qglobal.h>
22#include <private/qintrusivelist_p.h>
45 template<
typename Method,
typename ...Args>
51 template<
typename Method,
typename ...Args>
55 template<
typename Method,
typename ...Args>
59 template<
typename Method,
typename ...Args>
76 Message() : next(
nullptr) {}
81 template<
typename Method,
typename ...Args>
82 Message *createMessageFromMethod(Method &&method, Args &&...args);
83 void internalCallMethodInThread(Message *);
84 void internalCallMethodInMain(Message *);
85 void internalPostMethodToThread(Message *);
86 void internalPostMethodToMain(Message *);
93template <
typename Return,
typename Object,
typename... Args>
100template<
typename Method,
typename ...Args>
103 struct I :
public Message {
105 std::tuple<std::decay_t<Args>...> arguments;
106 I(Method &&method, Args&& ...args) : m(std::forward<Method>(method)), arguments(std::forward<Args>(args)...) {}
109 class_type *me =
static_cast<class_type *>(thread);
110 std::apply(m, std::tuple_cat(std::make_tuple(me), arguments));
113 return new I(std::forward<Method>(method), std::forward<Args>(args)...);
116template<
typename Method,
typename ...Args>
119 Message *m = createMessageFromMethod(std::forward<Method>(method), std::forward<Args>(args)...);
120 internalCallMethodInMain(m);
123template<
typename Method,
typename ...Args>
126 Message *m = createMessageFromMethod(std::forward<Method>(method), std::forward<Args>(args)...);
127 internalCallMethodInThread(m);
130template<
typename Method,
typename ...Args>
133 Message *m = createMessageFromMethod(std::forward<Method>(method), std::forward<Args>(args)...);
134 internalPostMethodToThread(m);
137template<
typename Method,
typename ...Args>
140 Message *m = createMessageFromMethod(std::forward<Method>(method), std::forward<Args>(args)...);
141 internalPostMethodToMain(m);
QQmlThreadPrivate(QQmlThread *q)
QFieldList< QQmlThread::Message, &QQmlThread::Message::next > MessageList
bool event(QEvent *e) override
This virtual function receives events to an object and should return true if the event e was recogniz...
void postMethodToThread(Method &&method, Args &&...args)
bool isThisThread() const
void waitForNextMessage()
void postMethodToMain(Method &&method, Args &&...args)
bool isParentThread() const
void callMethodInMain(Method &&method, Args &&...args)
void callMethodInThread(Method &&method, Args &&...args)
QObject * threadObject() const
QT_REQUIRE_CONFIG(liburing)