fdbus之事件循环及线程关系

fdbus中包含通过源码可以看到包含两种事件循环的实现CFdEventLoop和CThreadEventLoop,CBaseWorker是一个线程类,说起事件循环一般离不开线程,qt除外,qt的框架保证了该线程下所有的QObject对象共享一个事件队列,每个QObject对象都有线程相关性,即属于哪个线程。

CBaseWorker是一个线程类,需要在该线程类类实现对事件循环。

按照按照我目前对fdbus代码的理解,CBaseWorker使用了CThreadEventLoop事件循环,理由如下,参数flag默认不设置,采用默认值,从这个角度去理解的话使用的是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;
}


但是我是从消息发送的代码去分析的,在消息接收流程里没有找到与该CThreadEventLoop事件循环有关的东西,反而是在CFdEventLoop中找到了消息接收的代码,从代码看又是冲突的,搞混淆了,目前位置还是没有搞明白消息循环接收是如何实现的。

猜你喜欢

转载自blog.csdn.net/iqanchao/article/details/133384110
今日推荐