Qt QEventLoop 与 Android Looper 实现消息循环简单对比分析

QEventLoop 与 Looper 功能基本相同,实现方式大致也相同,都可以在线程中开启一个消息循环,分发消息。下面对比两种结构实现消息派发的实现方式。

1.QEventLoop 和 Looper 每个线程中都只能有一个。

2.消息队列

        每个线程都有一个消息队列,Qt 的消息队列在QThredData中保存,QThredData中还保存一个QEventDispatcher用来派发消息, Looper的消息队列直接保存在looper中。

3.添加消息

        Qt使用QApplication::PostEvent()向消息队列中添加消息(事件),PostEvent中有个Receiver参数从中获取receiver所在线程的消息队列,Looper使用Handler sendMessage 等添加。

4.开启消息循环

       QEvetnLoop::exec() 与 Looper.loop(),做的事情基本一样,一个死循环中派发消息。

5.派发消息

       Qt通过QEventLoop::processEvent()->QThredData::eventDispatcher::processEvent()->QApplication::sendPostedEvents 从QThredData保存的消息队列中拿出消息,派发给QObject::event处理。Qt实现信号槽的QueuedConnection也是通过post消息的方式实现。

       Looper 在 loop函数中调用Handler.handlerMessage()处理消息派发。

 

 

       

 

上一篇:HandlerThread的使用


下一篇:Handler源码分析