鸿蒙源码阅读-- 用户程序框架中的libevent 原创 精华
拓维信息流沙客
发布于 2023-2-11 23:14
浏览
0收藏
概念简述
用户程序框架存在一种异步操作相关的框架,对于应用程序,需要保证ui线程不被阻塞,这个框架便保证了这样的一个机制。
eventhandler:
是一种用户在当前线程上投递InnerEvent事件或者Runnable任务到异步线程上处理的机制;
eventRunner
是存在一个线程上的事件循环器
eventQuene
存在于eventRunner中管理innerEvent的数据结构
innerEvent
用于投递的事件(也包括任务,线程间通信以及异步任务处理)
源码相关分析
innerEvent
所有的innerEvent 存在一个eventPool管理,Get方法是获取事件的结构,重载了很多的不同参数。
返回为innerEvent一个unique_ptr,这种独占式指针,但注意模板参数的析构方法不是默认的,其实重载的deleter就是eventPool去回收这些已经被消耗掉的事件了。
可以看到事件被消耗后又放回了event buffer pool
innerevent针对用户开发可以分为两种一个发送线程消息,另一个是投递任务。一般来说发送消息,需要用户去处理事件,这个用在eventHandler中的ProcessEvent处理,所以不同的handler需要自己实现ProcessEvent方法。
可以看到EventHandler::DistributeEvent会做相关处理。
DistributeEvent 方法会在 eventRuner中的loop中被调用。
再看看eventQuene的相关实现
它的成员变量,包括了互斥锁,状态机管理,不同的队列
感觉说明几个类的关系,画一个类图会更加直观一点,后续有时间更新。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
赞
3
收藏
回复
3
1
相关推荐
分析部分学习了