Message framework 是对消息循环的封装和扩展,Chromium在消息循环中增加处理内部任务的工作。将内部工作处理寄生在Windows的消息循环中,会有一个问题,就是没有Windows自身消息,而有Chromium内部工作,此时内部动作就无法及时处理。Chromium这里定义了一个自定义消息kMsgHaveWork,用来在Chromium内部有工作的时候,驱动Windows的消息一直会运行。

从代码级别来说,Chromium内部工作队列被塞入工作时Post一条kMsgHaveWork消息。
计划工作的消息就是在 ScheduleWork 里Post的。

Message framework伪代码就是如下示例:

 for(;;)
{
// 1. 消息循环
if (PeekMessage())
{
// 1.1 增加了分发器用于响应
if (dispatcher)
{
dispatcher->Dispatch();
}
else
{
TranslateMessage();
DispatchMessage();
}
}
// 2. 内部工作
DoWork();
// 3. 内部延时工作
DoDelayWork();
// 4. 内部空闲工作
DoIdleWork();
// 5. 等待消息
WaitMessage();
}

Chromium的Message pump(消息泵)是一个比较严谨,精细的循环,为了安全的让外部接入这个循环,Chromium使用委派模式,并被派生出MessageLoop。只要使用MessageLoop类就可以实现内部"工作"处理。

MessagePump 消息泵抽象基类 嵌套类Delegate委派类 提供外部使用。
MessagePumpWin 消息泵实现类 嵌套类有Observer观察者类和Dispatcher派发类。

MessageLoop 是Delegate委派类的派生类。
大致了解,等以后用到再来详细分析。

1.4. chromium源代码分析 - chromiumframe - 消息系列的更多相关文章

  1. 1.3. chromium源代码分析 - chromiumframe - 窗口系列

    在_tWinMain中有这样两条语句: MainWindowDelegate delegate; view::Window::CreateNativeWindow(NULL, gfx::Rect(), ...

  2. 1.2. chromium源代码分析 - chromiumframe - 入口函数

    ChromiumFrame的入口函数在main.cpp中,打开main.cpp.中包含3个类和_tWinMain函数._tWinMain就是我们要找的入口函数.我做了部分注释: int APIENTR ...

  3. 1.1. chromium源代码分析 - chromiumframe - 介绍

    本人能力有效,面对chromium庞大的代码就头大.还是先由前辈的chromiumFrame入手. 1. chromeFrame概貌 chromiumFrame是前辈的心血之作,以最小化的方式抽出ch ...

  4. Memcached源代码分析 - Memcached源代码分析之消息回应(3)

    文章列表: <Memcached源代码分析 - Memcached源代码分析之基于Libevent的网络模型(1)> <Memcached源代码分析 - Memcached源代码分析 ...

  5. 0. chromium源代码分析 - 序

    本打算在CSDN写完这系列文字,却因为在CSDN中误删了一篇blog,该篇blog被移到了回收站.然而CSDN居然没有从回收站撤销删除的操作方法.联想到之前CSDN泄密的问题,其可靠性值得怀疑.随转向 ...

  6. Raw-OS源代码分析之消息系统-Queue_Size

    分析的内核版本号截止到2014-04-15.基于1.05正式版.blogs会及时跟进最新版本号的内核开发进度,若源代码凝视出现"???"字样,则是未深究理解部分. Raw-OS官方 ...

  7. 1.异步消息Jms及其JmsTemplate的源代码分析,消息代理ActiveMQ

    一. 介绍 借助Spring,有多种异步消息的可选方案,本章使用Jms.Jms的消息模型有两种,点对点消息模型(队列实现)和发布-订阅消息模型(主题). 图1.点对点消息模型(一对一) 图2.发布-订 ...

  8. Raw-OS源代码分析之消息系统-Queue_Buffer

    分析的内核版本号截止到2014-04-15,基于1.05正式版.blogs会及时跟进最新版本号的内核开发进度,若源代码凝视出现"???"字样,则是未深究理解部分. Raw-OS官方 ...

  9. RTMPdump(libRTMP) 源代码分析 10: 处理各种消息(Message)

    ===================================================== RTMPdump(libRTMP) 源代码分析系列文章: RTMPdump 源代码分析 1: ...

随机推荐

  1. Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)

    目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制. 一.update-script脚本语法简介: 我们顺着所生成的脚本 ...

  2. Java学习疑惑(8)----可视化编程, 对Java中事件驱动模型的理解

    我们编写程序就是为了方便用户使用, 我觉得UI设计的核心就是简洁, 操作过于繁琐的程序让很大一部分用户敬而远之. 即使功能强大, 但是人们更愿意使用易于操作的软件. 近年流行起来的操作手势和逐渐趋于成 ...

  3. 初探swift语言的学习笔记(闭包 - 匿名函数或block块代码)

    很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或 block了,而叫闭包(closure).下面配合代码来理解一下swi ...

  4. Ext.Net 使用总结之GridPanel中的选中行

    1.判断GridPanel中是否选中了某行 if (!GridPanel1.hasSelection()) { Ext.Msg.alert("提示", "请选择记录!&q ...

  5. JavaScript知识(一)

    首先想为大家分享两句话: 侧耳听智慧,专心求聪明,呼求明哲,扬声求聪明.——箴言2:2-3 你要保守你心,胜过保守一切,因为一生的果效,是由心发出.——箴言 4:23 ...O(∩_∩)O...今天学 ...

  6. Mvc--Html.ActionLink()用法

    },new{ target="_blank"})会生成 <a href="Products/Detail/1" target="_blank&q ...

  7. 锁·——lock关键字详解

    作  者:刘铁猛 日  期:2005-12-25 关键字:lock 多线程 同步 小序 锁者,lock关键字也.市面上的书虽然多,但仔细介绍这个keyword的书太少了.MSDN里有,但所给的代码非常 ...

  8. (转)Java通过axis调用WebService

    转自:http://blog.csdn.net/wanglha/article/details/49679825 转载地址:http://www.linuxidc.com/Linux/2015-06/ ...

  9. HDFS之HBase伪分布安装

    1.HBase简介 HBase是Apache Hadoop中的一个子项目,Hbase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的DFS工具就可以看到这些这些数据 存储文件 ...

  10. BZOJ 1832: [AHOI2008]聚会( LCA )

    LCA模板题...不难发现一定是在某2个人的LCA处集合是最优的, 然后就3个LCA取个最小值就OK了. 距离就用深度去减一减就可以了. 时间复杂度O(N+MlogN) (树链剖分) -------- ...