首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

LABVIEW深入探索之如何使多个事件分支执行相同的功能

LABVIEW深入探索之如何使多个事件分支执行相同的功能

类似的问题在论坛上看到多次了,非常典型,所以汇总几种常见的方法供大家参考。
  在实际应用中,经常会遇到多个不同的事件源,需要触发同一事件的问题。最为常见的是程序的菜单项和工具栏的按钮问题。通常情况下,工具栏的按钮对应菜单条的中的某一项,二者的作用是相同的。在C语言编程中,通常为二者注册同一回调函数,这样二者的反应就完全相同了。
  在LABVIEW的编程实践中,也会遇到类似的问题,基于LABVIEW事件结构的特殊性,存在几种常见的方法可以解决这个问题。
  1、为一个分支静态注册多个事件。
  这种方法与其它编程语言类似,类似于为多个事件注册同一回调函数。下面我用四个按钮来举例说明。


  显然图中四个按钮的作用是类似的,比如移动图片,包括上下左右四个方向。一般情况下,我们对四个按钮是分别静态注册事件,因此会出现四个事件处理分支,非常繁琐,也容易出现问题。
  初学者可能没有注意到一个事件分支可以静态注册多个控件的事件,注册方法如下图所示:



  通过事件结构中控件的引用可以区分是那个按钮产生了事件。
  2、利用值(信号)属性节点转发事件
  如果我们为每个按钮单独注册了事件,可以在一个按钮事件分支中处理所有按钮的响应代码,通过值(信号)属性节点,可以编程实现触发事件,如下图所示:


  3、不同事件分支调用同一VI
  这种方法使用比较简便,对需要相同功能的事件分支,调用同一函数(VI),因为非常简单,就不举例了。
  4、采用生产消费者模式(事件)
  使用基于事件的生产消费者模式后,对于不同的事件分支,产生相同的功能就非常容易了,无非是向队列入队相同的数据而已。LABVIEW提供了生产消费者模式的模版,如下图所示:


  但是一般都要根据自己的需要,重新封装队列,比如下面的例子:



  上面介绍了几种常用的方法,如果我们使用了生产消费者模式,结合事件结构,我们就有了自己的消息处理中心,这种方式与WINDOWS的消息机制非常类似,使事件结构的处理更为灵活,重点推荐这种方式。
返回列表