コード例 #1
0
ファイル: sbuscontroller.cpp プロジェクト: realbardia/silicon
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();
}