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

          新聞中心

          EEPW首頁 > 測試測量 > 設計應用 > labview棧和隊列

          labview棧和隊列

          作者: 時間:2017-01-09 來源:網(wǎng)絡 收藏

          同步控制技術----棧與隊列

          本文引用地址:http://www.ex-cimer.com/article/201701/337150.htm

          (其中有很多圖片不是馬上就能看到的,查看方法是:鼠標右擊不可看圖片,選擇復制圖片地址,然后在瀏覽器中打開即可。因為本文是摘錄的,給各位朋友帶來不便,請多諒解!)

          在計算機編程中棧是一個很重要的概念,尤其在匯編語言中,需要不斷進棧和出棧的操作.棧是限定在一個表的尾端進行插入(進堆棧)和刪除(出堆棧)的線性表.是后進先出結構(LIFO).

          隊列的定義和棧的定義是類似的,區(qū)別是數(shù)據(jù)是先進先出(FIFO)

          labview還有一個概念緩沖區(qū)BUFFER,典型的比如CHART,它默認保存數(shù)據(jù)長度是1024.BUFFER的概念和隊列是非常相似的,都是一個先進先出的結構.如果我們設定隊列的數(shù)據(jù)長度也是1024.比較一下他們的區(qū)別.

          區(qū)別一:未達到設定

          開始的時候,隊列和緩沖區(qū)中都是沒有數(shù)據(jù)的,當有數(shù)據(jù)進入的時候,隊列和緩沖區(qū)中的數(shù)據(jù)在不斷地增加,對于緩沖區(qū),因為未達到它最大許可的長度 1024,因此數(shù)據(jù)是不斷第增加的,隊列則不同,它的數(shù)據(jù)是否增加取決于是否有讀隊列的過程,就是所說的出隊,如果出隊的速度大于入隊的速度,隊列中則根本不會有數(shù)據(jù).如果沒有出隊的過程或者出隊的速度小于入隊的過程,隊列中的數(shù)據(jù)也是不斷地增加的.這是第一個區(qū)別.

          區(qū)別二:到達設定值

          當隊列和BUFFER都達到了1024個數(shù)據(jù)后,這是再有新的數(shù)據(jù)要進來,隊列和BUFFER的表現(xiàn)是不同的,對于BUFFER,它將自動擠出(形象的說法,當然也是編程實現(xiàn)的)最早進入BUFFER的數(shù)據(jù),所謂先進先出.而隊列則不同.要求進入隊列的線程只能被動等待,一直到隊列中有別的線程取出數(shù)據(jù),隊列中有空閑位置.所以隊列有調節(jié)讀寫速度線程的能力.

          相同點一:數(shù)據(jù)進入都是在尾部,(隊列插入如果在頭部,就編程上面所說的棧了)

          相同點二:對于中間數(shù)據(jù)都實現(xiàn)了有效的封裝,你無法直接提取中間的某個數(shù)據(jù),你可以讀出中間的數(shù)據(jù),但是不能改變當前BUFFER和隊列的值.

          LABVIEW提供的隊列的功能函數(shù)(包括棧),在逐點分析庫提供了DBL型的BUFFER,我在另外的日志中專門提到了,這里就不多說了.

          LV隊列的函數(shù)是基本函數(shù),無法進行深入跟蹤,估計應該是采用C++的算法然后封裝的,我實際測試過,它的運行效率遠高于用數(shù)組的方式構成的隊列,為了詳細說明隊列和棧的細節(jié),我還是用數(shù)組的形式,然后在介紹LV的隊列函數(shù).

          首先看看如何用數(shù)組實現(xiàn)棧的功能:

          棧的操作是非常簡單的,只有壓棧和出棧兩個操作(PUSH AND POP)

          我們用AE來實現(xiàn)它.分成三個action: Init,Push ,Pop

          首先嚴格自定義ENUM,表示三個動作.

          這樣我們就完成了棧的AE的制作過程。

          看看它的調用過程。

          10次循環(huán),棧中的數(shù)據(jù)應該是0,1,2,3,4,5,6,7,8,9。棧的彈出次序應該是9,8,7,6,5,4,3,2,1,0

          運行結果確實如此。

          與棧相反,隊列是一個先入先出的數(shù)據(jù)結構,我們對棧的過程稍微修改一下,就可以得到隊列。就不多介紹了。

          下面重點介紹一下LV提供的隊列的具體功能。

          分別介紹這8個節(jié)點的具體功能:
          1:獲得隊列(實際是得到隊列的參考)它有5個數(shù)據(jù)端子

          name:String
          隊列在LV系統(tǒng)中是名稱來區(qū)分的,LV系統(tǒng)自己維護一個包含的目前所有隊列的表,當你運行這個函數(shù)的時候,它首先會查找表中是否已經(jīng)存在這個隊列參考,如果存在,就直接返回這個參考,如果不存在,就建立一個新的隊列,并將隊列參考加入表中進行維護。這樣做的好處是非常明顯的,允許我們在任何子VI中,只需要知道隊列的名稱就可以運行這個函數(shù)直接得到隊列參考,不用通過全局變量或者數(shù)據(jù)流輸入來得到參考,在一個層層嵌套的VI中想傳遞一個數(shù)據(jù)很不容易,也不利于模塊化。

          上一頁 1 2 下一頁

          關鍵詞: labview棧隊

          評論


          技術專區(qū)

          關閉
          看屁屁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); })();