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

1 篇文章 0 订阅

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()处理消息派发。

 

 

       

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值