微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > LABVIEW的深入探索之全局变量的优劣

LABVIEW的深入探索之全局变量的优劣

时间:01-09 来源:互联网 点击:

有用的。但是程序员还是会不自觉地倾向于滥用它们,任何变量(全局变量、局部变量、LV2全局变量)在使用时需要格外小心,“连线”还是最安全的。

我非常讨厌上下或者左右堆积大量的控件,在程序框图中多达20几个层叠顺序结构中,到处散布一些全局变量或者局部变量。

至于你提及的生产者消费者模式,我还是愿意使用队列来完成,使用队列可以使我们不需要考虑读的时机问题。

-----------------------------------------------------------------------------------------------------------------------------T

TBOB:

在生产者消费者模式中,使用队列(我也倾向于使用队列,而不是变量)同样存在问题。消费者可能运行速度高于消费者,此时可能读回空数据,必须在编程中检查是否是否读回空数据。

----------------------------------------------------------------------------------------------------------------------------

TST:

在生产消费者模式使用队列时,我愿意使用超时的默认值-1,这意味着消费者在没有数据时不会执行一个循环,也不需要检查超时是否发生了。

------------------------------------------------------------------------------------------------------------------------------

TITOU:

真是个好题目!

全局变量是魔鬼吗?------我愿意这样回答:不是,只要你遵循了全局变量的工作规则。

我经常建议避免使用全局变量,但是的确在特定的场合,我还是会使用全局变量,因为使用全局变量的确非常方便。

使用但不要滥用。

--------------------------------------------------------------------------------------------------------------------------------

ROBERT:

即使在基于文本的编程语言中,采用封装和抽象本身就倾向于不使用全局变量。理想的结构应该是这样的,如果函数需要一个变量,必须从函数的调用者哪里接收这个变量。尽管如此,即使在这样的编程环境中,还是需要有限度的和合理的利用全局变量。正如上面的帖子中指出的那样,一个写入者,多个读取者。亦或需要在整个程序应用,但是不需要改变的场合。

我经常采样下面的方式。在程序启动时,先运行一个配置函数或者“参数设置”函数,此时没有其它的进程工作,数据采集也尚未进行。此时为程序的其它部分创建全局变量是合理的。

------------------------------------------------------------------------------------------------------------------------

KEVIN:

我在程序开发时,习惯于在多个消费者情况下使用“通告”。通常情况下,只有一个生产者。但是像全局变量情况,可能会有几个“潜在”的生产者。

对于使用通告,消费者可以进行选择。通告可以不管消费这是否已经消费了先前的数据,随时查询最新的数据,这类似于全局变量。通告也可以一直等待,直至有最新更新的数据,避免不断的轮询数据,加重CPU的负担,这个是全局变量无法实现的。

----------------------------------------------------------------------------------------------------------------------------

BEN:

很抱歉没能早点参与这个话题的讨论。我并非求全责备,但是全局变量存在下列主要问题:

1、数据拷贝

2、利用线程

3、对于一个写入者,多个读取者,OK.但是这要求开发者必须确认只有唯一一个写入者。这对一个拥有800多个VI,有些是动态载入的情况下,是很难做到的。

4、灵活性 。如果你使用一个LV2型全局变量,需要的情况下,你可以很安全地添加新的新的写入者。在编写大型应用时,这的确是令人头疼的问题。

5、性能。LV2全局变量可以很容易重用缓存,全局变量不行。

-----------------------------------------------------------------------------------------------------------------

RAY:

我同意大家的看法。我通常用全局变量保持静态数据,比如IP地址。

-------------------------------------------------------------------------------------------------------------------------

TST:

VI之间传递数据有几种方法。

首先,可以通过函数连接器的端子连线数据,这是LABVIEW传递数据最有效的方法,同时也最安全,最容易理解。但是对于一个正在运行的VI,想传入数据,这种连线方法无能为力。

第二,有一种LV内置的全局变量(上面讨论的),这是VI之间传递数据最快捷的方法。同时非常易于管理,你很容易可以找到引用它们的位置。主要不利之处在于,多处创建全局变量时,都会生成全局变量的数

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top