LabVIEW程序设计模式(五)—生产者/消费者模式(2)_VI的可重入性
时间:01-09
来源:互联网
点击:
在介绍VI的动态调用之前有必要对LabVIEW在执行VI过程中的规则有个大致的了解。众所周知,LabVIEW是通过VI的文件名(VI Name)来表示独立的VI的,并不是VI的路径。因此,LabVIEW不允许具有相同名字的VI同时载入内存中,即使这些VI存储在不同的路径中。
在前面曾经提到,LabVIEW本身就是一种多线程设计的语言。那么当同一背面板中放置两个VI的实例时代码应该如何执行呢?在图 29中,右侧是测试VI运行的时间,左侧是Wait.vi的具体实现代码,仅仅是等待一定的秒数。那么在右侧的VI中,输出的Time是多少呢?是3秒还是2秒?
图 29 Reentrant Execution
打开VI的Highlight调试工具,可以看出两个Wait.vi实例的调用并不是同时执行的,而是依次按顺序执行的,至于哪一个实例先执行是不确定的。这是由于LabVIEW本身是并行设计的,从理论上而言,两个VI的实例是同步执行的,但是如果两个Wait.vi实例同时执行必定会产生参数赋值紊乱,因为LabVIEW只允许内存中存在一个名称的VI。因此,此时Time的输出结果是3秒。
如果在实际使用中需要这样的应用该如何解决呢?LabVIEW提供了VI的可重入技术,打开Wait.vi,单击按键,选择图 30所示的Reentrant execution选项。此时再次运行Time的输出结果是2秒。从Highlight的运行过程来看,两个Wait.vi实例是同时执行的,因此总的运行时间就是1秒。
图 30 VI Properties
事实上,LabVIEW的可重入技术相当于在原有VI的基础上产生了一个相同的副本,打开Wait.vi从标题栏可以看出VI的名称为Wait.vi:1(clone)。同理这是由于LabVIEW中不允许内存中的VI存在同名,VI的可重入技术相当于产生了与原VI具有同样功能的新VI并且修改了该VI的命名。
在实际应用中,需要根据情况决定是否设置VI的可重入属性,灵活使用。并不是需要将所有的VI都设置为可重入,那将占据大量的内存资源。
在前面曾经提到,LabVIEW本身就是一种多线程设计的语言。那么当同一背面板中放置两个VI的实例时代码应该如何执行呢?在图 29中,右侧是测试VI运行的时间,左侧是Wait.vi的具体实现代码,仅仅是等待一定的秒数。那么在右侧的VI中,输出的Time是多少呢?是3秒还是2秒?
图 29 Reentrant Execution
打开VI的Highlight调试工具,可以看出两个Wait.vi实例的调用并不是同时执行的,而是依次按顺序执行的,至于哪一个实例先执行是不确定的。这是由于LabVIEW本身是并行设计的,从理论上而言,两个VI的实例是同步执行的,但是如果两个Wait.vi实例同时执行必定会产生参数赋值紊乱,因为LabVIEW只允许内存中存在一个名称的VI。因此,此时Time的输出结果是3秒。
如果在实际使用中需要这样的应用该如何解决呢?LabVIEW提供了VI的可重入技术,打开Wait.vi,单击
图 30 VI Properties
事实上,LabVIEW的可重入技术相当于在原有VI的基础上产生了一个相同的副本,打开Wait.vi从标题栏可以看出VI的名称为Wait.vi:1(clone)。同理这是由于LabVIEW中不允许内存中的VI存在同名,VI的可重入技术相当于产生了与原VI具有同样功能的新VI并且修改了该VI的命名。
在实际应用中,需要根据情况决定是否设置VI的可重入属性,灵活使用。并不是需要将所有的VI都设置为可重入,那将占据大量的内存资源。
LabVIEW程序设计模式可重入 相关文章:
- 频宽、取样速率及奈奎斯特定理(09-14)
- 为什么要进行信号调理?(09-30)
- IEEE802.16-2004 WiMAX物理层操作和测量(09-16)
- 为任意波形发生器增加价值(10-27)
- 基于PCI 总线的高速数据采集系统(09-30)
- 泰克全新VM6000视频测试仪助力数字电视等产品测试 (10-06)