新聞中心

labview棧和隊(duì)列

作者: 時(shí)間:2017-01-09 來(lái)源:網(wǎng)絡(luò) 收藏



max queue size:I32

定義的隊(duì)列的最大長(zhǎng)度,當(dāng)輸入-1時(shí),隊(duì)列長(zhǎng)度不受限制,需要注意的是,如果取出數(shù)據(jù)的速度小于加入隊(duì)列數(shù)據(jù)的速度,隨著時(shí)間的推移,需要的內(nèi)存會(huì)不斷地增加,這顯然是存在問(wèn)題的,如果我們沒(méi)有規(guī)定最大長(zhǎng)度的話,編程時(shí)候要注意自己來(lái)協(xié)調(diào)速度。如果規(guī)定的最大長(zhǎng)度,當(dāng)達(dá)到最大長(zhǎng)度時(shí)候,加入隊(duì)列的線程會(huì)一直等待到隊(duì)列中有空閑位置為止。

本文引用地址:http://butianyuan.cn/article/201701/337150.htm

如果已經(jīng)有同名隊(duì)列存在,該設(shè)置是不起作用的,用的還是第一次運(yùn)行這個(gè)函數(shù)時(shí)的設(shè)置。


element data type:隊(duì)列中的數(shù)據(jù)類型,允許任意數(shù)據(jù)類型。
其它兩個(gè)非常簡(jiǎn)單,不介紹了。

2:元素加入隊(duì)列(Enqueue Element)

3:預(yù)覽要出隊(duì)的元素(讀,并不取出)

4:取得隊(duì)列當(dāng)前狀態(tài)( Get Queue Status)

這個(gè)函數(shù)比較重要,它可以獲得當(dāng)前隊(duì)列的狀態(tài)信息,包括隊(duì)列最大長(zhǎng)度(設(shè)定的),隊(duì)列名稱,當(dāng)前正在運(yùn)行的等待取出數(shù)據(jù)的(運(yùn)行DEQUEUE)的數(shù)量,當(dāng)前正在運(yùn)行的加入隊(duì)列的數(shù)量(ENQUEUE),以及當(dāng)前隊(duì)列中的所有數(shù)據(jù)。

5:釋放隊(duì)列(當(dāng)程序結(jié)束時(shí),進(jìn)行清理工作,防止內(nèi)存泄露)

6:在相反方向插入隊(duì)列(棧的功能),如果按這種方式插入一定數(shù)量,再依次取出,就是上面說(shuō)的棧的功能。

對(duì)于隊(duì)列,這個(gè)函數(shù)可以人工實(shí)現(xiàn)隊(duì)列優(yōu)先級(jí),最重要的信息可以放在其他不重要的信息前面,比如嚴(yán)重錯(cuò)誤,緊急停止等。

7:取出元素。如果當(dāng)前隊(duì)列中無(wú)元素可以提取,該函數(shù)會(huì)一直等待到TIMEOUT或者有數(shù)據(jù)為止。

8。清除隊(duì)列(FLUSH),清除隊(duì)列中的所有元素。


可見(jiàn),隊(duì)列的基本操作是很簡(jiǎn)單的,關(guān)鍵是如何在實(shí)際工作中正確運(yùn)用。

我們首先用AE封裝一個(gè)隊(duì)列:

我們來(lái)模擬一下WINDOWS消息,首先定義消息結(jié)構(gòu)。



然后定義AE,封裝隊(duì)列。





下面我們來(lái)實(shí)驗(yàn)一下這個(gè)AE,它可以運(yùn)行在任何一個(gè)VI中,為了方便,我們?cè)谝粋€(gè)VI中做三個(gè)循環(huán),兩個(gè)寫入隊(duì)列(生產(chǎn)者),一個(gè)讀取隊(duì)列(消費(fèi)者);


隊(duì)列的應(yīng)用范圍非常廣,經(jīng)常和狀態(tài)機(jī)聯(lián)合使用,就是經(jīng)常提到的隊(duì)列狀態(tài)機(jī),有機(jī)會(huì)我會(huì)結(jié)合狀態(tài)機(jī)一起介紹。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: labview棧隊(duì)

評(píng)論


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

關(guān)閉