页面加载中,请稍候
来源:ck365发布时间:2019-09-15127浏览
询问 AI在实际应用中,经常会遇到多个不同的事件源,需要触发同一事件的问题。最为常见的是程序的菜单项和工具栏的按钮问题。通常情况下,工具栏的按钮对应菜单条的中的某一项,二者的作用是相同的。在C语言编程中,通常为二者注册同一回调函数,这样二者的反应就完全相同了。
在Labview的编程实践中,也会遇到类似的问题,基于LABVIEW事件结构的特殊性,存在几种常见的方法可以解决这个问题。
1、为一个分支静态注册多个事件。
这种方法与其它编程语言类似,类似于为多个事件注册同一回调函数。下面我用四个按钮来举例说明。

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


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

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

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

上面介绍了几种常用的方法,如果我们使用了生产消费者模式,结合事件结构,我们就有了自己的消息处理中心,这种方式与WINDOWS的消息机制非常类似,使事件结构的处理更为灵活,重点推荐这种方式。
新闻来源:ck365,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!

2026-07-20
2026-06-24
2026-06-26