void QQmlThread::internalCallMethodInMain(Message *message) { Q_ASSERT(isThisThread()); d->lock(); Q_ASSERT(d->mainSync == 0); d->mainSync = message; if (d->m_mainThreadWaiting) { d->wakeOne(); } else if (d->m_mainProcessing) { // Do nothing - it is already looping } else { d->triggerMainEvent(); } while (d->mainSync) { if (d->m_shutdown) { delete d->mainSync; d->mainSync = 0; break; } d->wait(); } d->unlock(); }
void QQmlThread::internalCallMethodInThread(Message *message) { Q_ASSERT(!isThisThread()); d->lock(); Q_ASSERT(d->m_mainThreadWaiting == false); bool wasEmpty = d->threadList.isEmpty(); d->threadList.append(message); if (wasEmpty && d->m_threadProcessing == false) d->triggerThreadEvent(); d->m_mainThreadWaiting = true; do { if (d->mainSync) { QQmlThread::Message *message = d->mainSync; unlock(); message->call(this); delete message; lock(); d->mainSync = 0; wakeOne(); } else { d->wait(); } } while (d->mainSync || !d->threadList.isEmpty()); d->m_mainThreadWaiting = false; d->unlock(); }
void QQmlThread::waitForNextMessage() { Q_ASSERT(!isThisThread()); d->lock(); Q_ASSERT(d->m_mainThreadWaiting == false); d->m_mainThreadWaiting = true; if (d->mainSync || !d->threadList.isEmpty()) { if (d->mainSync) { QQmlThread::Message *message = d->mainSync; unlock(); message->call(this); delete message; lock(); d->mainSync = 0; wakeOne(); } else { d->wait(); } } d->m_mainThreadWaiting = false; d->unlock(); }
void QQmlThread::internalPostMethodToMain(Message *message) { Q_ASSERT(isThisThread()); d->lock(); bool wasEmpty = d->mainList.isEmpty(); d->mainList.append(message); if (wasEmpty && d->m_mainProcessing == false) d->triggerMainEvent(); d->unlock(); }
void QQmlThread::internalPostMethodToThread(Message *message) { Q_ASSERT(!isThisThread()); d->lock(); bool wasEmpty = d->threadList.isEmpty(); d->threadList.append(message); if (wasEmpty && d->m_threadProcessing == false) d->triggerThreadEvent(); d->unlock(); }