新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > LabVIEW程序設計模式(五)—生產者/消費者模式(2)_VI的可重入性

        LabVIEW程序設計模式(五)—生產者/消費者模式(2)_VI的可重入性

        作者: 時間:2017-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都設置為可重入,那將占據大量的內存資源。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 额尔古纳市| 巢湖市| 汉源县| 宝应县| 缙云县| 伽师县| 黔西县| 兴城市| 和政县| 巴彦淖尔市| 溧水县| 龙陵县| 高尔夫| 丰都县| 肃宁县| 大安市| 霍山县| 苗栗县| 中宁县| 上饶县| 揭阳市| 景洪市| 吉木乃县| 宁安市| 汝南县| 贵州省| 溆浦县| 永顺县| 新泰市| 荣昌县| 杭州市| 永和县| 越西县| 宣恩县| 法库县| 平定县| 冕宁县| 昆山市| 临澧县| 格尔木市| 孟州市|