<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > LabVIEW程序設(shè)計(jì)模式(五)—生產(chǎn)者/消費(fèi)者模式(2)_VI的可重入性

          LabVIEW程序設(shè)計(jì)模式(五)—生產(chǎn)者/消費(fèi)者模式(2)_VI的可重入性

          作者: 時(shí)間:2017-01-09 來(lái)源:網(wǎng)絡(luò) 收藏
          在介紹VI的動(dòng)態(tài)調(diào)用之前有必要對(duì)LabVIEW在執(zhí)行VI過(guò)程中的規(guī)則有個(gè)大致的了解。眾所周知,LabVIEW是通過(guò)VI的文件名(VI Name)來(lái)表示獨(dú)立的VI的,并不是VI的路徑。因此,LabVIEW不允許具有相同名字的VI同時(shí)載入內(nèi)存中,即使這些VI存儲(chǔ)在不同的路徑中。
          在前面曾經(jīng)提到,LabVIEW本身就是一種多線程設(shè)計(jì)的語(yǔ)言。那么當(dāng)同一背面板中放置兩個(gè)VI的實(shí)例時(shí)代碼應(yīng)該如何執(zhí)行呢?在圖 29中,右側(cè)是測(cè)試VI運(yùn)行的時(shí)間,左側(cè)是Wait.vi的具體實(shí)現(xiàn)代碼,僅僅是等待一定的秒數(shù)。那么在右側(cè)的VI中,輸出的Time是多少呢?是3秒還是2秒?


          圖 29 Reentrant Execution
          打開(kāi)VI的Highlight調(diào)試工具,可以看出兩個(gè)Wait.vi實(shí)例的調(diào)用并不是同時(shí)執(zhí)行的,而是依次按順序執(zhí)行的,至于哪一個(gè)實(shí)例先執(zhí)行是不確定的。這是由于LabVIEW本身是并行設(shè)計(jì)的,從理論上而言,兩個(gè)VI的實(shí)例是同步執(zhí)行的,但是如果兩個(gè)Wait.vi實(shí)例同時(shí)執(zhí)行必定會(huì)產(chǎn)生參數(shù)賦值紊亂,因?yàn)長(zhǎng)abVIEW只允許內(nèi)存中存在一個(gè)名稱的VI。因此,此時(shí)Time的輸出結(jié)果是3秒。
          如果在實(shí)際使用中需要這樣的應(yīng)用該如何解決呢?LabVIEW提供了VI的可重入技術(shù),打開(kāi)Wait.vi,單擊按鍵,選擇圖 30所示的Reentrant execution選項(xiàng)。此時(shí)再次運(yùn)行Time的輸出結(jié)果是2秒。從Highlight的運(yùn)行過(guò)程來(lái)看,兩個(gè)Wait.vi實(shí)例是同時(shí)執(zhí)行的,因此總的運(yùn)行時(shí)間就是1秒。


          圖 30 VI Properties
          事實(shí)上,LabVIEW的可重入技術(shù)相當(dāng)于在原有VI的基礎(chǔ)上產(chǎn)生了一個(gè)相同的副本,打開(kāi)Wait.vi從標(biāo)題欄可以看出VI的名稱為Wait.vi:1(clone)。同理這是由于LabVIEW中不允許內(nèi)存中的VI存在同名,VI的可重入技術(shù)相當(dāng)于產(chǎn)生了與原VI具有同樣功能的新VI并且修改了該VI的命名。
          在實(shí)際應(yīng)用中,需要根據(jù)情況決定是否設(shè)置VI的可重入屬性,靈活使用。并不是需要將所有的VI都設(shè)置為可重入,那將占據(jù)大量的內(nèi)存資源。


          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();