19#include <QtCore/qglobal.h>
21#include <private/qintrusivelist_p.h>
44 template<
typename Method,
typename ...Args>
50 template<
typename Method,
typename ...Args>
54 template<
typename Method,
typename ...Args>
58 template<
typename Method,
typename ...Args>
75 Message() : next(
nullptr) {}
80 template<
typename Method,
typename ...Args>
81 Message *createMessageFromMethod(Method &&method, Args &&...args);
82 void internalCallMethodInThread(Message *);
83 void internalCallMethodInMain(Message *);
84 void internalPostMethodToThread(Message *);
85 void internalPostMethodToMain(Message *);
92template <
typename Return,
typename Object,
typename... Args>
99template<
typename Method,
typename ...Args>
102 struct I :
public Message {
104 std::tuple<std::decay_t<Args>...> arguments;
105 I(Method &&method, Args&& ...args) : m(std::forward<Method>(method)), arguments(std::forward<Args>(args)...) {}
108 class_type *me =
static_cast<class_type *>(thread);
109 std::apply(m, std::tuple_cat(std::make_tuple(me), arguments));
112 return new I(std::forward<Method>(method), std::forward<Args>(args)...);
115template<
typename Method,
typename ...Args>
118 Message *m = createMessageFromMethod(std::forward<Method>(method), std::forward<Args>(args)...);
119 internalCallMethodInMain(m);
122template<
typename Method,
typename ...Args>
125 Message *m = createMessageFromMethod(std::forward<Method>(method), std::forward<Args>(args)...);
126 internalCallMethodInThread(m);
129template<
typename Method,
typename ...Args>
132 Message *m = createMessageFromMethod(std::forward<Method>(method), std::forward<Args>(args)...);
133 internalPostMethodToThread(m);
136template<
typename Method,
typename ...Args>
139 Message *m = createMessageFromMethod(std::forward<Method>(method), std::forward<Args>(args)...);
140 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
And object living in the QML thread, in case you want to parent other objects to it.
QT_REQUIRE_CONFIG(thread)