1 事件结构及它的图形化表示法
事件被用来通知用户有异步活动发生。图形化语言的事件响应包括:用户界面事件、外部I/O事件和程序其它部分的事件。
对事件的处理程序也被称为:事件驱动程序。事件驱动程序可以分为若干个分支,每个分支处理不同的事件响应。所以对事件的响应结果也可以控制程序的流程。
事件驱动机制来自于可视化的操系统,可视化操作系统对用户事件提供了简洁、有效的响应方式,最常见的事件来自于鼠标和键盘。
虚拟仪器借助于操作系统的事件处理机制实现了图形化语言的事件响应能力。在没有引入事件结构之前,LabVIEW是借助于轮询的方式来查询用户操作,由于轮询的方式会占用一定的CPU资源,甚至可能遗漏事件,所以这种处理方式并非理想。事件结构的出现避免了对CPU资源的占用,同时也避免了事件的遗漏。
事件结构在函数选板》编程》结构子选板中可以找到,并可以将其直接拖拽到程序框图中,图形化表示的事件结构,参见下图。
图 1 图形化的事件结构
与Case结构和循环结构类似,事件结构也包含了一个主框架,这个框架内将用来放置事件处理的事件驱动程序代码。如果事件处理任务众多,会有众多事件分支存在,在结构上类似Case的多帧结构(选择器标签)。
当在程序框图上拖放一个事件结构时,我们只能看到上图所示的一帧已经预先注册的超时事件(Timeout),超时事件分支。它具有定时延迟的基本功能(不包括While循环),参见下图。
图 2具有定时延迟的基本功能
当然也可以采用另一种表示方法,参见下图。
图 3利用事件结构内部节点获得中止时间
通过这个例子也好理解内部节点中“时间”的含义(是事件响应的停止时间)。
超时事件
超时事件是一种特殊的事件,当然也可以看成是默认的事件分支。如果存在其它事件源时,超时事件完全可以被忽略或取消。看下面一个例子。
图 4仅有的两个事件之一——超时事件
图 5仅有的两个事件之一——“停止”鼠标按下
这个例子运行状况是这样的:程序运行后进入超时事件,等待5秒钟后,在字符串显示器中显示:“嗨。。。5秒钟内,用户没有操作!”(标志超时事件已经结束)。然后一直等待用户操作,当用户点击停止按键后,程序停下来,同时显示:“哈哈,终于响应了。”
为了响应多个事件的请求,所以要求在事件结构外面套加一个While循环。以便能够及时准确的响应每个事件。
5.6.2 事件结构的数据流运行机制
从数据流的运行机制来看,事件可以理解为多个无定序的数据源。事件的响应处理过程是根据事件发生的先后顺序,依次进行处理。而事件的处理过程仍然是依据数据流运行机制的。
所谓多个无定序的数据源是指:事件发生是随机的,它们之间没有固定的时间或先后顺序关系。
事件结构的运行机制是一个一个的处理事件,这样就要求在事件处理程序上要求:简单快速执行,避免事件处理过程中产生不必要的堆积。
下面通过一个例子来进一步理解事件结构中需要注意的一些问题。
例 5-14 事件处理的演示
在例子程序的前面版中,我们放置了四个控件。门——布尔控件表示一个门(鼠标点击相当于敲门);敲门次数——控件用来纪录事件的次数;停止——布尔控件用来停止演示程序的运行;其中还有一个门把手装饰用控件。
下面我们在具体看看它的程序框图。
图 6 例5-14的程序框图(仅包含两个事件源)
评论