LabVIEW 2009新功能 - 傳引用

以前版本的LabVIEW雖然也有多種方法可以讓數據以引用的方式在程序間傳遞,但是用起來都有些麻煩。 LabVIEW有了構建數據傳引用的節點,大大簡化了傳引用的程序代碼。

新添的有關傳引用的兩個節點在函數選板“Programing->Application Control->Memory Control”中,分別是“New Data Value Reference”和“Delete Data Value Reference”。 “New Data Value Reference”用於創建一個數據的引用,“Delete Data Value Reference”可以從引用中取回原來的數據。

引用最主要應用於多線程程序中。如果兩個線程同時對同一份數據進行修改,則必須使用傳引用的機制。否則,使用值傳遞的方式,數據在數據線分叉的地方,就會編程獨立的兩份,之後在兩個線程內分別修改的是兩份完全獨立的數據,沒辦法對同一份數據進行修改的。

比如下圖這個程序,程序輸入了一個數組,然後需要在兩個並行的子VI中同時對這個數組中的數據進行修改。每個子VI可能修改了數組不同的元素,程序運行結束產生的數組應當把兩個子VI中的修改都包含進來。因此,程序一開始需要數組數據生成一個引用,然後把引用分別傳遞到兩個子VI中去。兩個子VI都運行結束後,在從引用中取回數據。

LabVIEW中已有的函數還都是為值傳遞設計的,所以使用值傳遞少不了把數據取出、放回的過程。這以過程中,可能又會產生數據拷貝,效率會比較差。好在我們可以使用“In Place Element Structure”結構來處理從引用中取出、放回數據的過程。配合了“In Place Element Structure”結構使用後,LabVIEW會盡量使用數組原地址,而不是把從引用中取出的數據複製一份,這樣就做到了傳引用與效率的兼顧。比如下面兩圖中的程序,功能是完全相同的,但LabVIEW會對下面一幅圖中的程序進行優化,提高效率。


以上文章轉載自:LabVIEW 2009 新功能 – 传引用 – 凡人琐忆
感謝作者RuanQizhen授權使用