对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"

下一个文件

#include "base/observer_list.h"

下一个文件

#include "base/ref_counted.h"

下一个文件

#include "base/scoped_ptr.h"

下一个文件

#include "base/task.h"

下一个文件

#include "base/message_pump_win.h"

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

#include "base/compiler_specific.h"

下一个文件

#include "base/lazy_instance.h"

下一个文件

#include "base/message_pump_default.h"

下一个文件

#include "base/thread_local.h"

 
05-08 15:03