2011年9月7日,第二稿
8.4 LabVIEW图形化语言编程范式之二——事件编程
计算机可视化操作系统(Mac OS、Windows、Linux)的先后出现,为LabVIEW提供了图形化编程语言的生存空间和可持续发展的基本环境。
但是,在LabVIEW6.1发布之前,事件驱动机制并没有引入,直到LabVIEW6.1发布后,事件驱动机制才在LabVIEW中出现。
8.4.1 轮询与事件
在可视化的操作系统中,人们对计算机的操作基本上是通过鼠标或键盘来实现。人们通过对鼠标的拖拽或点击以及键盘的键入实现对计算机最基本的操作。计算机则通过对这些用户事件的响应实现来自用户的操作要求。
对于这样的事件通常被称为:GUI事件(用户界面事件)。
尽管可视化操作系统一直都是采用事件处理机制来响应、处理用户的操作要求。可是在早期的LabVIEW版本中并没有引入这种事件处理机制。那时,LabVIEW对用户的鼠标、键盘操作响应采用的是轮询的方式来进行的,轮询就是不断的检测用户的操作。而对轮询的检测结果的处理,则是采用队列的方式来进行的。 直到LabVIEW6.1推出后,事件驱动机制才被引入GUI的处理。
轮询的方法有两个缺点:一是,占用CPU的资源;二是,可能遗漏用户的操作请求。
自从LabVIEW6.1推出了事件驱动处理机制后,就完全去掉了轮询的这两个缺点。使得GUI事件驱动占据了用户界面事件响应处理的主导地位。这些事件包括鼠标事件、键盘事件、窗体事件、对象事件等等。
事件驱动机制的建立,使得LabVIEW在处理复杂事情方面能力大大的增强,可以更方便的实现用户的多种需求(不仅仅是GUI事件,还可以处理用户自定义的事件)。同时LabVIEW也具备了通用编程语言的最基本特性。
关于事件处理机制的图形化表示方法,我们在前面(结构中)已经做过介绍,这里就不再复述了。
对于这样的事件通常被称为:GUI事件(用户界面事件)。
尽管可视化操作系统一直都是采用事件处理机制来响应、处理用户的操作要求。可是在早期的LabVIEW版本中并没有引入这种事件处理机制。那时,LabVIEW对用户的鼠标、键盘操作响应采用的是轮询的方式来进行的,轮询就是不断的检测用户的操作。而对轮询的检测结果的处理,则是采用队列的方式来进行的。 直到LabVIEW6.1推出后,事件驱动机制才被引入GUI的处理。
轮询的方法有两个缺点:一是,占用CPU的资源;二是,可能遗漏用户的操作请求。
自从LabVIEW6.1推出了事件驱动处理机制后,就完全去掉了轮询的这两个缺点。使得GUI事件驱动占据了用户界面事件响应处理的主导地位。这些事件包括鼠标事件、键盘事件、窗体事件、对象事件等等。
事件驱动机制的建立,使得LabVIEW在处理复杂事情方面能力大大的增强,可以更方便的实现用户的多种需求(不仅仅是GUI事件,还可以处理用户自定义的事件)。同时LabVIEW也具备了通用编程语言的最基本特性。
关于事件处理机制的图形化表示方法,我们在前面(结构中)已经做过介绍,这里就不再复述了。
8.4.2 图形化语言中事件驱动编程的主要特点
事件驱动机制是程序静静的等待事件的发生,在等待事件发生期间并不占用任何CPU的资源。通过对GUI事件的响应处理可以控制程序执行流程的改变。所以它被程序设计者广泛使用于GUI事件。
事件驱动处理机制除了可以响应GUI事件外,还可以自定义用户事件和在状态机中使用事件结构等等应用。
由于事件是随时随地发生的,是不可预知的。它对事件的响应类似于汇编语言中的中断响应。所以,对事件响应的处理(图形化语言)还是应该遵循数据流原则。但程序处理要简洁、迅速,这点前面我们多次强调过。
现在可以说,事件驱动的编程范式已经成为大多应用程序设计中不可缺少的一种方式。
下面我们看一个在DAQmx中应用事件处理的实例:利用事件驱动机制实时修改脉冲发生器的频率和占空比。
事件驱动处理机制除了可以响应GUI事件外,还可以自定义用户事件和在状态机中使用事件结构等等应用。
由于事件是随时随地发生的,是不可预知的。它对事件的响应类似于汇编语言中的中断响应。所以,对事件响应的处理(图形化语言)还是应该遵循数据流原则。但程序处理要简洁、迅速,这点前面我们多次强调过。
现在可以说,事件驱动的编程范式已经成为大多应用程序设计中不可缺少的一种方式。
下面我们看一个在DAQmx中应用事件处理的实例:利用事件驱动机制实时修改脉冲发生器的频率和占空比。
关于事件运行机制的更多介绍,我们会在设计模式部分给与更多的说明。



