QWaitConditionEvent *QWaitConditionPrivate::pre() { mtx.lock(); QWaitConditionEvent *wce = freeQueue.isEmpty() ? new QWaitConditionEvent : freeQueue.takeFirst(); wce->priority = GetThreadPriority(GetCurrentThread()); wce->wokenUp = false; // insert 'wce' into the queue (sorted by priority) int index = 0; for (; index < queue.size(); ++index) { QWaitConditionEvent *current = queue.at(index); if (current->priority < wce->priority) break; } queue.insert(index, wce); mtx.unlock(); return wce; }