事件驱动程序设计

✍ dations ◷ 2025-04-12 11:01:15 #计算机编程,事件 (计算机)

事件驱动程序设计(英语:Event-driven programming)是一种电脑程序设计模型。这种模型的程序运行流程是由用户的动作(如鼠标的按键,键盘的按键动作)或者是由其他程序的消息来决定的。相对于批处理程序设计(batch programming)而言,程序运行的流程是由程序员来决定。批处理(batch)的程序设计在初级程序设计教学课程上是一种方式。然而,事件驱动程序设计这种设计模型是在交互程序(Interactive program)的情况下孕育而生的。

事件驱动程序可以由任何编程语言来实现,然而使用某些语言来撰写会比其他的语言来的简单。有些集成开发环境(简称IDE)也会影响实现事件驱动程序设计的难易程度。有的 IDE 会使的开发工作变的很简单,有的则否。

取代传统上一次等待一个完整的指令然后再做运行的方式,事件驱动程序模型下的系统,基本上的架构是预先设计一个事件循环所形成的程序,这个事件循环程序不断地检查目前要处理的信息,根据要处理的信息运行一个触发函数进行必要的处理。其中这个外部信息可能来自一个目录夹中的文件,可能来自键盘或鼠标的动作,或者是一个时间事件。

对一个事件驱动(event driven)系统进行程序设计,因此可以视为改写系统默认触发函数的行为,来符合自己需要的一种动作。输入的事件可以放进事件循环或者是经由已经注册的中断处理器来与硬件事件交互;而许多的软件系统使用了混和这两种技术的处理。预先设计好的算法确定了一件事,那就是当他们被需要的时候,就会在适当的时机被触发。也因此提供了一个模拟中断驱动环境(interrupt driven environment)的软件抽象架构。事件驱动程序设计基本上包含了许多小程序片段,这些小程序片段被称为事件处理器(英语:event handler)并且被用来回应外部的事件与分发事件。通常尚未被事件处理器处理的事件,都会被系统放在一个称为事件队列的数据结构中,等待被处理。

许多情况下,事件处理器可以自己触发事件,因此也可能形成一个事件串(英语:event cascade)。事件驱动程序设计的着重于弹性以及异步化上面,并且企图尽可能的modeless。 图形用户界面这类程序就是典型的事件驱动设计方式。

计算机操作系统是事件驱动程序的典型示例。在操作系统的最底层,中断处理器的动作就像是硬件事件的直接处理器,搭配着 CPU 运行分配事件规则动作。对软件进程而言,基本上操作系统可视为一个事件分配器,发送数据和软件中断给用户自己写的软件进程。

下面是两个数相加的示例,分别用批量版本与事件驱动版本来撰写


相关

  • 碳青霉烯类抗生素β-内酰胺类抗生素(Beta-lactam antibiotic)是一种种类很广的抗生素,其中包括青霉素及其衍生物、头孢菌素、单酰胺环类(英语:monobactam)、碳青霉烯和青霉烯类酶抑制剂等。基本上
  • 野猫野猫可以指:
  • 亲水性亲水性指分子能够透过氢键和水分子形成短暂键结的物理性质。因为热力学上合适,这种分子不只可以溶解在水里,也可以溶解在其他的极性溶液内。一个亲水性分子,或说分子的亲水性部
  • 澳洲茄碱澳洲茄碱是一种有毒的化学物质,是澳洲茄胺(英语:solasodine)的糖苷。澳洲茄碱会在出现在茄科植物中。澳洲茄边碱也是一种不成功的抗癌用药Coramsine(英语:Coramsine)中的成分之一,另
  • 马那瓜马那瓜(西班牙语:Managua)是尼加拉瓜的首都及第一大城市,也是中美洲地区第二大城市。位于尼加拉瓜的西部以及尼加拉瓜第二大湖-马那瓜湖的沿岸。该城在1855年被订为尼加拉瓜的首
  • 无孔亚纲无孔亚纲(Anapsida)属于羊膜动物,头骨上没有颞颥孔。它们是爬行动物中最原始的一群,出现于石炭纪晚期。由于龟鳖目演化自双孔亚纲,所以无孔亚纲全部灭绝,其中的米勒古蜥科、夜守龙
  • 工具包基因工具包基因或工具箱基因(英语:toolkit gene),是Evo-devo基因工具包(英语:evo-devo gene toolkit)的成员,代指生物体基因组中的一小部分基因,其产物控制着生物体的胚胎发育。工具箱基
  • 笔记笔记是写作体裁,一卷书没有固定主题,一段写天文,下一段可以是写狐狸故事,是一种作者个人的“随笔”或“杂记”性质之文学作品。笔记体的著作在中国古典典籍中为数众多。笔记体著
  • 林宏司林宏司(Hayashi Kōji),日本电视剧的编剧。毕业于关西学院大学。曾在出版社工作过,2000年以‘涙をふいて’一作作为编剧出道。擅长描写专业领域的故事。
  • R+树R+树可以用地址来查询数据。地址用坐标来表示,一般是(x, y)轴坐标,常用于地理坐标。单个地址查询问题早已被解决,而多地址查询,或者查询在坐标系上的附近地址则需要更巧妙的算法