void QQmlThreadPrivate::run() { lock(); wakeOne(); unlock(); q->startupThread(); exec(); q->shutdownThread(); }
void QQmlThreadPrivate::threadEvent() { lock(); if (m_shutdown) { quit(); wakeOne(); unlock(); q->shutdownThread(); } else { m_threadProcessing = true; while (!threadList.isEmpty()) { QQmlThread::Message *message = threadList.first(); unlock(); message->call(q); lock(); delete threadList.takeFirst(); } wakeOne(); m_threadProcessing = false; unlock(); } }
// Trigger even in thread. Must be called from main thread. void QQmlThreadPrivate::triggerThreadEvent() { Q_ASSERT(!q->isThisThread()); QCoreApplication::postEvent(this, new QEvent(QEvent::User)); }
// Trigger mainEvent in main thread. Must be called from thread. void QQmlThreadPrivate::triggerMainEvent() { Q_ASSERT(q->isThisThread()); QCoreApplication::postEvent(&m_mainObject, new QEvent(QEvent::User)); }