void SBusController::finish( const QString & bus ) { if( bus.isEmpty() ) return; SBusController *core = (*active_buses)[bus]; if( core != this ) { qCritical() << QString("SBusController::finish : This SBusController Object can't remove \"%1\" from SBusController.").arg(bus); return ; } active_buses->remove(bus); /*! ---------- Dequeue first not pass up process ------------ */ SBusController *item = 0; if( !queued_buses->contains(bus) ) return; QQueue<SBusController*> *queue = queued_buses->value(bus); if( queue == 0 ) return; for( int i=0 ; i<queue->count() ; i++ ) { if( !queue->at(i)->passUpAndWait() ) { item = queue->takeAt( i ); break; } } if( item == 0 ) return; /*! --------------------------------------------------------- */ if( queued_buses->value(bus)->isEmpty() ) delete queued_buses->take( bus ); active_buses->insert( bus , item ); emit item->go(); }