relación de subprocesos y bucle de eventos de fdbus

fdbus contiene dos implementaciones de bucle de eventos, CFdEventLoop y CThreadEventLoop, que se pueden ver a través del código fuente. CBaseWorker es una clase de subproceso. Hablando de bucles de eventos, los subprocesos generalmente son inseparables. Excepto qt, el marco qt garantiza todos los objetos QObject bajo el subproceso. Al compartir una cola de eventos, cada objeto QObject depende del subproceso, es decir, a qué subproceso pertenece.

CBaseWorker es una clase de subproceso y el bucle de eventos debe implementarse en esta clase de subproceso.

Según mi comprensión actual del código fdbus, CBaseWorker usa el bucle de eventos CThreadEventLoop por las siguientes razones. El indicador de parámetro no está configurado de forma predeterminada y usa el valor predeterminado. Para entenderlo desde esta perspectiva, se usa CThreadEventLoop:

bool CBaseWorker::init(uint32_t flag)
{
    if (mEventLoop)
    {
        return true;
    }
    if (flag & FDB_WORKER_ENABLE_FD_LOOP)
    {
        mEventLoop = new CFdEventLoop();
    }
    else
    {
        mEventLoop = new CThreadEventLoop();
    }
    mNormalJobQueue.eventLoop(mEventLoop);
    mUrgentJobQueue.eventLoop(mEventLoop);
    if (!mEventLoop->init(this))
    {
        LOG_E("CBaseWorker: fail to initialize event loop!\n");
        return false;
    }
    return true;
}


Pero analicé el código de envío de mensajes. No encontré nada relacionado con el bucle de eventos CThreadEventLoop en el proceso de recepción de mensajes. En cambio, encontré el código de recepción de mensajes en CFdEventLoop. Desde el punto de vista del código, es conflictivo y confuso. Bien, todavía no entiendo cómo se implementa la recepción de bucle de mensajes.

Supongo que te gusta

Origin blog.csdn.net/iqanchao/article/details/133384110
Recomendado
Clasificación