void MsgProcessor::handleProcessedMsg( msg_ptr msg ) { Q_ASSERT( QThread::currentThread() == thread() ); m_msg_ready.insert( msg.data(), true ); while( !m_msgs.isEmpty() ) { if( m_msg_ready.value( m_msgs.first().data() ) ) { msg_ptr m = m_msgs.takeFirst(); m_msg_ready.remove( m.data() ); //qDebug() << Q_FUNC_INFO << "totmsgsize:" << m_totmsgsize; emit ready( m ); } else { return; } } //qDebug() << Q_FUNC_INFO << "EMPTY, no msgs left."; emit empty(); }
void MsgProcessor::append( msg_ptr msg ) { if( QThread::currentThread() != thread() ) { qDebug() << "reinvoking msgprocessor::append in correct thread, ie not" << QThread::currentThread(); QMetaObject::invokeMethod( this, "append", Qt::QueuedConnection, Q_ARG(msg_ptr, msg) ); return; } m_msgs.append( msg ); m_msg_ready.insert( msg.data(), false ); m_totmsgsize += msg->payload().length(); if( m_mode & NOTHING ) { //qDebug() << "MsgProcessor::NOTHING"; handleProcessedMsg( msg ); return; } QFuture<msg_ptr> fut = QtConcurrent::run(&MsgProcessor::process, msg, m_mode, m_threshold); QFutureWatcher<msg_ptr> * watcher = new QFutureWatcher<msg_ptr>; connect( watcher, SIGNAL( finished() ), this, SLOT( processed() ), Qt::QueuedConnection ); watcher->setFuture( fut ); }