? ? ? ?LabVIEW在工業(yè)控制及儀器測量領(lǐng)域中用的會比較多,那么就經(jīng)常會涉及到數(shù)據(jù)采集、分析和處理的問題,為了提高效率,往往會在數(shù)據(jù)采集的同時就進行數(shù)據(jù)分析和處理,這時就需要用多線程來處理,多線程的概念如果有不了解的,可以參考這位博主的講解多線程(Thread、線程創(chuàng)建、線程池) - 作巴 - 博客園
? ? ? ?那么LabVIEW是支持多線程編程的,但是很多人在編程的時候喜歡使用局部變量和全局變量的方式來執(zhí)行程序,這樣的壞處就是可能會產(chǎn)生競爭冒險的問題,也就是說有可能出現(xiàn)在讀取某一個變量的數(shù)據(jù)的時候正好發(fā)生了對該變量寫入的操作,那讀出來的數(shù)據(jù)就不確定是不是自己想要的數(shù)據(jù)了,當(dāng)然在軟件編程中我們可能會使用Lock的機制來避免這一問題,這里可以參考這位博主講解C#中Lock的使用C#之lock_故里2130的博客-CSDN博客_c# lock,但是我想說的是,在LabVIEW中為了解決競爭冒險的問題以及能及時相應(yīng)前面板操作的問題,生產(chǎn)者消費者結(jié)構(gòu)不失為一種性價比很高的結(jié)構(gòu)。
? ? ? ? 生產(chǎn)者結(jié)構(gòu)負責(zé)記錄事件到隊列中,而消費者負責(zé)從隊列中將事件一個個取出并執(zhí)行該事件,隊列遵循先入先出的規(guī)則,整個過程可以有條不紊地進行。下面就以我自己編程做的這個Simon小游戲來做示例演示該結(jié)構(gòu)的用法。
? ? ? ?下面是這個小游戲的文件夾中的文件,Control包括自己做的大量的自定義控件,file中存放游戲中保存的數(shù)據(jù),Picture和music都是游戲中用到的素材,SubVI是游戲中調(diào)用的一些子VI,.lvpoj是工程文件,Main.vi是程序的入口。
? ? ? ?下面是游戲的主界面,游戲開始時界面動畫會播放,左右的四個圖標(biāo)分別是排行榜、名片、聯(lián)系我們和更多消息,點開分別有各種信息,界面中間填寫用戶名密碼并選擇游戲難度即可點擊開始游戲,開始游戲后進入游戲界面,點擊退出游戲退出主界面并關(guān)閉游戲。
? ? ? ?然后是游戲程序面板,上面一個while循環(huán)是生產(chǎn)者循環(huán),主要用于記錄操作者的操作事件,事件消息記錄在隊列中,下面這個循環(huán)是消費者循環(huán),主要用于消息事件的處理。
?處理過程如下圖所示
Simon游戲曾經(jīng)一度風(fēng)靡西方數(shù)十年,游戲規(guī)則如下圖所示
? ? ? ?這部分消息是游戲處理過程,第一部分是AI操作,在我設(shè)計這款游戲中四個小羊分別會按順序行走到自己的食物上并返回;第二部分是玩家操作,玩家需要按照AI執(zhí)行的順序點擊小羊,小羊走到自己的食物上并返回,每點對一次小羊加一分。
? ? ? ?關(guān)于生產(chǎn)者消費者這個結(jié)構(gòu)在使用的過程中還是會出現(xiàn)很多bug的,程序我放在下邊供大家參考使用,使用過程中如果碰到什么問題,歡迎大家私信我一起交流學(xué)習(xí)!文章來源:http://www.zghlxwxcb.cn/news/detail-490020.html
鏈接:https://pan.baidu.com/s/1FD4JE42akpyF9G1pHGX79g?
提取碼:53n9? ? ?復(fù)制這段內(nèi)容打開「百度網(wǎng)盤APP 即可獲取」文章來源地址http://www.zghlxwxcb.cn/news/detail-490020.html
到了這里,關(guān)于LabVIEW編程基礎(chǔ)之生產(chǎn)者消費者結(jié)構(gòu) -- Simon小游戲(以羊了個羊為背景)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!