bool ThreadDispatcher::peek(peekMessage& ev, bool del) { if (!ev.num) return false; bool ret = false; { #ifndef OX_NO_MT MutexPthreadLock lock(_mutex); #endif if (ev.num == -1) ev.num = (int)_events.size(); LOGDN("peeking message"); _replyLast(0); if (!_events.empty() && ev.num > 0) { if (del) _popMessage(ev); ev.num--; ret = true; } } _runCallbacks(); return ret; }
//-------------------------------------------------------------------------------------------- void MessageQueue::popMessage(MessageVector& msgVector) { if (m_counts <= 0) return; { QMutexLocker locker(&m_lock); msgVector.reserve(m_counts); do { if (m_ring_buf->empty()) break; Message* msg = _popMessage(); assert(msg != 0); if (msg == nullptr) continue; msgVector.push_back(msg); } while (true); m_counts = 0; } }