LabVIEW之生產者/消費者模式--隊列操作


LabVIEW之生產者/消費者模式--隊列操作

彭會鋒 

      本文章主要是對學習LabVIEW之生產者/消費者模式的學習筆記,其中涉及到同步控制技術-隊列、事件、狀態機、生產者-消費者模式,這幾種技術在在本章中都會有側重點的進行介紹和總結!


  • 隊列同步技術-操作函數

      同步控制技術可以實現在多個VI之間或者同一VI 不同縣城之間同步任務和交換數據;在LabVIEW中提供了‘同步’函數選板,包括通知器、隊列、信號量、集合點、事件、首次調用函數,本文主要關注同步控制技術之隊列技術:

隊列操作函數:

1 “獲取隊列引用”函數

 2 "元素入隊列" 和 “元素出隊列” 函數

函數作用:將元素入隊列和出隊列用(沒什么好說的!)
超時毫秒(-1)端子:如果未連接,默認輸入值為-1,表示永不超時,如果隊列滿,則一直等待直到隊列有空位為止;
如果連接端子,則新元素等待設定時間后仍無法入隊列,則結束本次等待!

 3 “最前端插入元素” 和 “有損耗元素入隊列” 函數

函數作用:將元素插入隊列,不過插入隊列方式有區別;
元素入隊列、最前端插入元素、有損耗元素入隊列三者區別:
”元素入隊列“函數采用先入后出次序,而“最前端插入元素”函數則采用后入先出(FIFO)的原則,類似於堆棧,因此可以使用隊列實現堆棧效果,相比數組實現有優勢;
“元素入隊列”函數如果隊列滿,則線程等待,直到有空位為止;“有損耗元素入隊列”在這種情況下則會自動刪除隊列前端元素,並在末端插入元素,可以用於實現緩沖區效果;

      4 “預覽隊列元素”函數

預覽隊列元素和元素出隊列區別:當返回隊列前段的元素時,是否刪除該元素!

5 “獲取隊列狀態”函數:主要用於判定隊列引用是否有效!

6 “清空隊列”和“釋放隊列引用”函數

“清空隊列”函數:清楚隊列所有元素,並以數組形式返回元素,用於一次全部讀取隊列元素;

  • 隊列課后練習

     1 基於隊列的數據采集系統

      

在此程序設計中學習到的知識:
1 數據類型和采用顯示控件的關系:此隊列的數據類型為一維數組,所以在元素出隊列時的元素也為一維數組,因此要采用波形圖空間;
2 子程序VI中設置了“等待函數”,但是沒有while循環,將子VI放入while循環中,相當於在while循環中添加了“等待函數”,其實對其的理解可以從c語言中加深理解;
3 while循環中停止條件的處理:對於入隊列循環,停止只意味着本循環停止,但並不意味着整個程序停止運行了,因為還有兩個循環在運行;對於元素出隊列循環,當元素空的時候會發生超時錯誤,進而停止本循環;在元素出隊列循環停止后會銷毀隊列引用,從而導致
獲取隊列狀態循環出錯,進而停止循環。具體結果如下:


 2 隊列傳遞數據練習

此程序學到的知識:
1 隊列數據類型設置為常量,所以用於數據顯示的控件為波形圖控件;
2 注釋的箭頭設置:函數->編程->結構->修飾
    
 
        

 3 多數據源輸入隊列程序

此程序學習知識點:
1 對於隊列的創建:通過隊列創建函數的名字搜索該引用,如果沒有則創建,如果有,則直接加入隊列
2 此程序采用三個while循環創建三個線程,並將數據同時加入一個隊列中,並最終進行顯示
3 注意此程序中對while循環的停止條件的處理;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM