事件驱动编程与状态机:原理、实践与乐趣
1. 事件驱动编程概述
现代图形用户界面(GUI)系统和许多嵌入式应用都采用了一种通用的程序结构,即事件驱动编程,它能优雅地及时处理多个异步事件。与传统的顺序程序(如“超级循环”或传统实时操作系统(RTOS)中的任务)相比,事件驱动编程需要一种截然不同的思维方式。
1.1 控制反转
大多数现代事件驱动系统遵循“好莱坞原则”,即“别打电话给我们,我们会打电话给你”。这意味着事件驱动程序在等待事件时并不处于控制状态,甚至是不活跃的。只有当事件到达时,程序才会被调用处理该事件,然后迅速释放控制权。这种安排使事件驱动系统能够并行等待多个事件,从而保持对所有需要处理的事件的响应能力。
这种机制带来了三个重要结果:
- 系统划分 :事件驱动系统自然地分为实际处理事件的应用程序和等待事件并将其分派给应用程序的事件驱动基础设施。
- 控制反转 :控制权位于事件驱动基础设施中,因此从应用程序的角度来看,与传统顺序程序相比,控制是反转的。
- 状态机特性 :事件驱动应用程序必须在处理每个事件后返回控制权,因此执行上下文不能像顺序程序那样保存在基于栈的变量和程序计数器中。相反,事件驱动应用程序成为一个状态机,或者实际上是一组协作的状态机,它们通过静态变量在事件之间保留上下文。
1.2 事件驱动框架的重要性
控制反转赋予了事件驱动基础设施应用框架的所有定义特征,而不是工具包。使用工具包时,你编写应用程序的主体并调用想要重用的工具包代码;使用框架时,你重用主
超级会员免费看
订阅专栏 解锁全文
1029

被折叠的 条评论
为什么被折叠?



