程序开始运行时,将超时时间的移位寄存器初始化为-1,表示不需要更新前
面板,然后在响应“投币”事件时,将移位寄存器设置为 0,表示在需要马上执
行超时事件分支,更新前面板,移位寄存器将这个 0 传递到下一次循环中,此时
其它事件来不及发生,程序马上就执行超时事件,更新前面板;超时事件里面,
因为刚更新了一次前面板,所以又将超时时间设置为-1,下次循环时因为超时时
间为-1,所以不产生超时事件,此时等待其它事件发生。
这种方法就保证只有在需要的时候才更新前面板,而且将超时时间设置为
0,保证了程序会先执行超时事件分支,然后才会响应其它事件,鼠标双击“投
币”按钮的动作,希望能连续二次触发投币事件而中间不执行超时事件是不可能
的,因为鼠标的双击速度至少在 10ms 以上,就算有设置鼠标移动的事件源,然
后在响应一次鼠标移动事件分支里面将超时时间设置为 0,鼠标快速移动也没办
法连接二次触发鼠标移动的事件,也是按鼠标移动事件-超时事件-鼠标移动事件
-超时事件…这样的顺序触发。
另外还有一种方法是使用用于动态注册事件来实现的。在数据满足某条件
时,注册对应的用户事件,让程序响应这个事件,在用户事件分支里面更新控件
的属性,最后注销这个用户事件,后之不再被触发,,其原理也跟用“值改变(信
号)”的属性节点来动态触发更新事件是一样的,但它的可扩展性更强一点,因
为会有更多的事件可以自由被动态注册,缺点就是要学习更复杂一点的动态注册
事件。
后面这几种方法在性能上区别不大,最终使用哪一种,可能还是根据自己的习惯、风格来决定
了解更多labview事件结构请进入:https://bbs.elecfans.com/topic-labviewevent.html
1