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;
    }
Example #2
0
//--------------------------------------------------------------------------------------------
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;
	}
}