LABVIEW的深入探索之全局变量的优劣
据拷贝。这会引发数据竞争。
第三,通过LV2全局变量,LV2的命名是根据变量出现的LABVIEW版本号,也有称作功能全局变量、函数全局变量或者USR全局变量。LV2全局变量是由一个仅循环一次的VI构成的,循环结构中包含未初始化的移位寄存器(USR)--USR用于在多次运行VI之间保持值。如果该VI设置成不重入方式,那么在不同位置多次调用这个VI时,USR可以共享数据。
LV2全局变量的优点是只存在一个数据拷贝,而且是内在的锁定机制。另外的优势在于可以通过添加代码提高它的性能,因为可以用于拥有自己的存储值,这是非常有用的。
第四,利用队列(高级函数选板,同其它同步函数在一起)。队列的常规用法是在队列中保存产生的数据,但是队列也有一种特殊的方法,使用队列作为全局变量。这种方式队列中只保存一个元素,每次调用队列开始时要取出元素,此时其它要使用队列的地方必须等待,直至正在调用队列的VI完成,把元素加入队列。利用队列构建的全局变量速度高于LV2全局变量,但是比内置的全局变量慢。
使用全局变量时,有几点必须指出,供参考。
1、打断了数据流。这是非常重要的一点,因为打断了数据流会导致程序难于理解,难于调试和排错。
2、竞争。当有多个位置写入全局变量时,非常容易导致数据丢失。
------------------------------------------------------------------------------------------------------------------
BEN:
使用全局变量对于大型应用程序的开发和升级非常危险。我再次强调全局变量是魔鬼,是魔鬼。
---------------------------------------------------------------------------------------------------------------------------
TBOB:
我再次重复几周前说过的话,全局变量不是魔鬼,不恰当地使用全局变量才是魔鬼。
我已经在测试测量领域开发了一些大型应用程序,我利用全局变量保存所有仪器的GPIB地址和PCI卡的名称,这些东西绝对不会在运行中写入,总是在读取。我就不明白了,这种情况下我用全局变量有错吗?
某些情况下,全局变量对简化程序是必须的。我使用全局变量类似于C语言的常量定义。
-----------------------------------------------------------------------------------------------------------------------
RAY:
我偶尔会使用全局变量,使用场合与TBOB类似。
----------------------------------------------------------------------------------------------------------------------
TBOB:
我曾经使用INI文件或者配置文件保存配置数据,但是每次读取它们非常繁琐,而且每当我需要读取一个仪器的GPIB地址时,速度很慢。如果使用文件,我通常在程序开始时读取文件,然后把配置数据保存在WORM全局变量(写一次,读任意)中,在状态机中使用它们。
--------------------------------------------------------------------------------------------------------------------------
BEN:
周末我又考虑一下全局变量的问题。
WORM GLOBALS(写一次,读多次)----------在你是程序开发者而且只有你是程序开发者的情况下是安全的。
------------------------------------------------------------------------------------------------------------------------------
TBOB:
很现实的想法,BEN.我只有在常量的情况或者WORM GLOBALS时才使用全局变量。技巧就是对于我的继任者,也告诫他们和采用同样的做法。
------------------------------------------------------------------------------------------------------------------------------
TBOB:
------------------------------------------------------------------------------------------------------------------------------
LABVIEW全局变 相关文章:
- LabView7.1点滴(5)--建立全局变量(01-09)
- labview深入探索------全局变量、局部变量与内存管理(01-09)
- labview的深入探索之全局变量、移位寄存器和LV2全局变量比较(01-09)
- 频宽、取样速率及奈奎斯特定理(09-14)
- 为什么要进行信号调理?(09-30)
- IEEE802.16-2004 WiMAX物理层操作和测量(09-16)