LabVIEW之生產(chǎn)者/消費者模式--隊列操作
本文章主要是對學習LabVIEW之生產(chǎn)者/消費者模式的學習筆記,其中涉及到同步控制技術-隊列、事件、狀態(tài)機、生產(chǎn)者-消費者模式,這幾種技術在在本章中都會有側(cè)重點的進行介紹和總結(jié)!
隊列同步技術-操作函數(shù)
同步控制技術可以實現(xiàn)在多個VI之間或者同一VI 不同縣城之間同步任務和交換數(shù)據(jù);在LabVIEW中提供了‘同步’函數(shù)選板,包括通知器、隊列、信號量、集合點、事件、首次調(diào)用函數(shù),本文主要關注同步控制技術之隊列技術:
隊列操作函數(shù):
1 “獲取隊列引用”函數(shù)
2 "元素入隊列" 和 “元素出隊列” 函數(shù)
函數(shù)作用:將元素入隊列和出隊列用(沒什么好說的!)超時毫秒(-1)端子:如果未連接,默認輸入值為-1,表示永不超時,如果隊列滿,則一直等待直到隊列有空位為止; 如果連接端子,則新元素等待設定時間后仍無法入隊列,則結(jié)束本次等待!
3 “最前端插入元素” 和 “有損耗元素入隊列” 函數(shù)
函數(shù)作用:將元素插入隊列,不過插入隊列方式有區(qū)別;元素入隊列、最前端插入元素、有損耗元素入隊列三者區(qū)別:”元素入隊列“函數(shù)采用先入后出次序,而“最前端插入元素”函數(shù)則采用后入先出(FIFO)的原則,類似于堆棧,因此可以使用隊列實現(xiàn)堆棧效果,相比數(shù)組實現(xiàn)有優(yōu)勢;“元素入隊列”函數(shù)如果隊列滿,則線程等待,直到有空位為止;“有損耗元素入隊列”在這種情況下則會自動刪除隊列前端元素,并在末端插入元素,可以用于實現(xiàn)緩沖區(qū)效果;
4 “預覽隊列元素”函數(shù)
預覽隊列元素和元素出隊列區(qū)別:當返回隊列前段的元素時,是否刪除該元素!
5 “獲取隊列狀態(tài)”函數(shù):主要用于判定隊列引用是否有效!
6 “清空隊列”和“釋放隊列引用”函數(shù)
“清空隊列”函數(shù):清楚隊列所有元素,并以數(shù)組形式返回元素,用于一次全部讀取隊列元素;
隊列課后練習
1 基于隊列的數(shù)據(jù)采集系統(tǒng)
在此程序設計中學習到的知識:1 數(shù)據(jù)類型和采用顯示控件的關系:此隊列的數(shù)據(jù)類型為一維數(shù)組,所以在元素出隊列時的元素也為一維數(shù)組,因此要采用波形圖空間;2 子程序VI中設置了“等待函數(shù)”,但是沒有while循環(huán),將子VI放入while循環(huán)中,相當于在while循環(huán)中添加了“等待函數(shù)”,其實對其的理解可以從c語言中加深理解;3 while循環(huán)中停止條件的處理:對于入隊列循環(huán),停止只意味著本循環(huán)停止,但并不意味著整個程序停止運行了,因為還有兩個循環(huán)在運行;對于元素出隊列循環(huán),當元素空的時候會發(fā)生超時錯誤,進而停止本循環(huán);在元素出隊列循環(huán)停止后會銷毀隊列引用,從而導致獲取隊列狀態(tài)循環(huán)出錯,進而停止循環(huán)。具體結(jié)果如下:
2 隊列傳遞數(shù)據(jù)練習
此程序?qū)W到的知識:1 隊列數(shù)據(jù)類型設置為常量,所以用于數(shù)據(jù)顯示的控件為波形圖控件;2 注釋的箭頭設置:函數(shù)->編程->結(jié)構->修飾
3 多數(shù)據(jù)源輸入隊列程序
此程序?qū)W習知識點:1 對于隊列的創(chuàng)建:通過隊列創(chuàng)建函數(shù)的名字搜索該引用,如果沒有則創(chuàng)建,如果有,則直接加入隊列2 此程序采用三個while循環(huán)創(chuàng)建三個線程,并將數(shù)據(jù)同時加入一個隊列中,并最終進行顯示3 注意此程序中對while循環(huán)的停止條件的處理;