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中找到了消息接收的代码,从代码看又是冲突的,搞混淆了,目前位置还是没有搞明白消息循环接收是如何实现的。