对chromium的MessageLoop非常感兴趣,接下来会详细分析Windows平台的具体实现。

代码版本:chromium-4.0.210.0_p26329


先看一下依赖的文件

message_loop.cc

#include "base/message_loop.h"

#include <algorithm>

#include "base/compiler_specific.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/message_pump_default.h"
#include "base/string_util.h"
#include "base/thread_local.h"

message_loop.h

#include <queue>
#include <string> #include "base/histogram.h"
#include "base/message_pump.h"
#include "base/observer_list.h"
#include "base/ref_counted.h"
#include "base/scoped_ptr.h"
#include "base/task.h" #if defined(OS_WIN)
// We need this to declare base::MessagePumpWin::Dispatcher, which we should
// really just eliminate.
#include "base/message_pump_win.h"
#elif defined(OS_POSIX)
#include "base/message_pump_libevent.h"
#endif
#if defined(OS_LINUX)
#include "base/message_pump_glib.h"
#endif

引用的头文件一多,一看就很复杂。

方便起见,从message_loop.h的第一个头文件开始,一路分析。

第一个文件

#include "base/histogram.h"

参考分析chromium之histogram.h,直方图是程序输出统计信息的一个功能

下一个文件

#include "base/observer_list.h"

参考分析chromium之observer_list,观察者模式

下一个文件

#include "base/ref_counted.h"

参考分析chromium之ref_counted,引用计数,可以手动控制对象的生命周期

下一个文件

#include "base/scoped_ptr.h"

参考分析chromium之scoped_ptr,局部指针可以用于内存的自动释放,离开作用域后,对象的生命周期也结束

下一个文件

#include "base/task.h"

参考分析chromium之task,任务,要执行的某一个功能

下一个文件

#include "base/message_pump_win.h"

参考分析chromium之message_pump_win


接下来看看message_loop.cc的引用的头文件

#include "base/compiler_specific.h"

参考分析chromium之compiler_specific

下一个文件

#include "base/lazy_instance.h"

参考分析chromium之lazy_instance

下一个文件

#include "base/message_pump_default.h"

参考分析chromium之message_pump_default

下一个文件

#include "base/thread_local.h"

参考分析chromium之thread_local


 

chromium之MessageLoop浅析的更多相关文章

  1. chromium之ScopedNSAutoreleasePool浅析

    上代码,看看注释 ScopedNSAutoreleasePool只有Mac系统特有的,也可以理解为OC特有的函数, 其他系统为空实现   // On the Mac, ScopedNSAutorele ...

  2. Chromium on Android: Android在系统Chromium为了实现主消息循环分析

    总结:刚开始接触一个Chromium on Android时间.很好奇Chromium主消息循环是如何整合Android应用. 为Android计划,一旦启动,主线程将具有Java消息层循环处理系统事 ...

  3. jQuery 3.0 的 Data 浅析

    jQuery 3.0 在6月9日正式发布了,3.0 也被称为下一代的 jQuery .这个版本从14年10月开始,其中发布过一次beta 版(2016/1/14,)和候选版(2016/05/20).一 ...

  4. 浏览器-02 Chromium的多线程

    Chromium 的多线程机制 概述 每个进程都有很多的线程; 多线程主要是为了保证UI线程(chrome 线程,主线程)不会被任何其它费时的操作阻碍而影响对用户的响应; 为了解决多线程通信和同步问题 ...

  5. 初识chromium thread的实现

    接触chromium已有一段时间,写点东西学习一下吧. 首先说一下用法,如何利用chromium封装好的thread类来开一个线程.在base里有一个封装该类的头文件thread.h,include它 ...

  6. 【Chromium中文文档】线程

    线程 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Threading. ...

  7. 1.4. chromium源代码分析 - chromiumframe - 消息系列

    Message framework 是对消息循环的封装和扩展,Chromium在消息循环中增加处理内部任务的工作.将内部工作处理寄生在Windows的消息循环中,会有一个问题,就是没有Windows自 ...

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

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

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

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

随机推荐

  1. IDEA Properties中文unicode转码问题

    在IDEA中创建了properties文件,发现默认中文不会自动进行unicode转码.如下 在project settings - File Encoding,在标红的选项上打上勾,确定即可 效果图 ...

  2. 深入理解C++中的初始化

    C++经过这么多年的发展,已然成了一种文化和艺术,而这种艺术和文化并不是C++所固有的,是C++在各个方面的应用的总结和艺术化的结果.C++看起来比较复杂,但是深入其中你会发现C++是那么优美而富有哲 ...

  3. 沉淀,再出发:jQuery的初步了解和入门

    沉淀,再出发:jQuery的初步了解和入门 一.前言     对于后端开发者来说,是不是真的不需要了解前端的开发经过和相关技术,从我个人的角度来说,我觉得如果不了解或者接触很少,极有可能造成开发的时候 ...

  4. layer 遮罩层等待

    效果 代码: js函数之前:var msg = layer.msg('努力中加载中...', {icon: 16,shade: [0.5, '#f5f5f5'],scrollbar: false,of ...

  5. TCP/IP 协议图--TCP/IP 基础

    1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议.实际生活当中有时也确实就是指这两种协议.然而在很多情况下,它只是利用 IP 进行通信时所 ...

  6. windows2003 iis6配置文件和win2008/2012 iis7.5配置文件

    转载某大牛.... 日国外站的单子  :反正跑着玩 简单看下 先 在线web扫描 https://www.yascanner.com/之后发现存在注入漏洞  asp的站  穿山甲可以注入,但是发现是m ...

  7. day13 多线程建立方法

    #01创建多线程    继承Thread类    覆盖run方法:run方法里面运行要执行的代码    创建对象    调用start方法,start方法会开启线程,然后调用run方法 获取线程名字: ...

  8. zeromq 笔记

    一. 当执行zmq_bind后会进入mute state,直到有进入或者出去的连接发生才会进入ready state 在mute state状态下会根据不同的套接字类型决定是丢弃消息还是阻塞 可参考z ...

  9. 关于UITableView 不能回调 tableView: cellForRowAtIndexPath的问题

    做项目时始终遇到一个问题,tableview不能回调cellForRowAtIndexPath方法,导致cell不能显示. 在网上没找到合理的解决方案. 自己弄了一下,按照自己的推测解决了这个问题 首 ...

  10. iOS js

    [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"idNumber\" ...