【草稿】chrome之事件通知模型
考虑把这部分内容作为下面这篇的一部分.....
http://www.douban.com/note/32671779/
关键类:
ThreadLocalPointer
NotificationService
NotificationObserver
NotificationRegistrar
Details
一:线程内的事件通知
其实就是在观察者模型的基础上添加了线程本地存储功能。
这几个类比较容易独立出来用在其他项目中。
NotificationService和NotificationObserver就是一个简单的观察者模型,
加上了线程本地存储,在NotificationService构造时,写入NotificationService的指针到当前线程中,利用 NotificationService::current()来获取当前数据,也就是说在其它地方,直接调用NotificationService::current()函数就可以回去到当前线程的NotificationService对象。
NotificationRegistrar封装了事件处理,在NotificationRegistrar析构的时候能够注销注册过的事件。
然后一堆"事件类型"被放到 notification_type.h 这个文件里面,如果对哪部分事件感兴趣,只需要在类中注册这个类型的事件就可以了。
事件通知的参数使用Details来模块化。
二:线程间的事件通知
这个主要MessageLoop的Post等方法来完成。
前面介绍的比较多。
http://www.douban.com/note/32671779/
关键类:
ThreadLocalPointer
NotificationService
NotificationObserver
NotificationRegistrar
Details
一:线程内的事件通知
其实就是在观察者模型的基础上添加了线程本地存储功能。
这几个类比较容易独立出来用在其他项目中。
NotificationService和NotificationObserver就是一个简单的观察者模型,
加上了线程本地存储,在NotificationService构造时,写入NotificationService的指针到当前线程中,利用 NotificationService::current()来获取当前数据,也就是说在其它地方,直接调用NotificationService::current()函数就可以回去到当前线程的NotificationService对象。
NotificationRegistrar封装了事件处理,在NotificationRegistrar析构的时候能够注销注册过的事件。
然后一堆"事件类型"被放到 notification_type.h 这个文件里面,如果对哪部分事件感兴趣,只需要在类中注册这个类型的事件就可以了。
事件通知的参数使用Details来模块化。
二:线程间的事件通知
这个主要MessageLoop的Post等方法来完成。
前面介绍的比较多。
热门话题 · · · · · · ( 去话题广场 )
- 2024画春天 170.0万次浏览
- 插画作品中的生活场景 新话题 · 4703.8万次浏览
- 你的猫拥有的超能力 41.1万次浏览
- 旅游时遇到的奇特体验 463.0万次浏览
- 大学期间你认为最后悔的一件事 新话题
- 发疯有用且很爽 4.7万次浏览