



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
61.LabVIEW-程序中的線程-4---動態(tài)連接庫函數(shù)的線程61.LabVIEW-程序中的線程-4---動態(tài)連接庫函數(shù)的線程61.LabVIEW-程序中的線程-4---動態(tài)連接庫函數(shù)的線程61.LabVIEW-程序中的線程-4---動態(tài)連接庫函數(shù)的線程編制僅供參考審核批準生效日期地址:電話:傳真:郵編:LabVIEW程序中的線程4-動態(tài)連接庫函數(shù)的線程四、動態(tài)連接庫函數(shù)的線程1.CLN中的線程設(shè)置LabVIEW可以通過CLN(CallLibraryFunctionNode)節(jié)點來調(diào)用動態(tài)連接庫中的函數(shù),在Windows下就是指.DLL文件中的函數(shù)。用戶可以通過CLN節(jié)點的配置面板來指定被調(diào)用函數(shù)運行所在的線程。相對于VI的線程配置,CLN的線程選項非常簡單,只有兩項:界面線程(RuninUIthread)和可重入方式(reentrant)。(新版本LabVIEW把這里的reentrant改為Runinanythread了)圖1:在CLN的配置面板上選擇函數(shù)運行的線程在LabVIEW的程序框圖上直接就可以看出一個CLN節(jié)點是選用的什么線程。如果是在界面線程,則節(jié)點顏色是較深的橘紅色的;如果是可重入方式的,則節(jié)點是比較淡的黃色。圖2:不同顏色表示CLN不同的線程設(shè)置2.如何選擇合適的線程對于在CLN中選取何種線程,有一個簡單的判斷方法。如果你要使用的動態(tài)連接庫是多線程安全的,就選擇可重入方式;否則,動態(tài)連接庫不是多線程安全的,就選擇界面線程方式。判斷一個動態(tài)連接庫是不是線程安全的,也比較麻煩。如果這個動態(tài)連接庫文檔中沒用明確說明它是多線程安全的,那么就要當他是非線性安全的;如果能看到動態(tài)連接庫的源代碼,代碼中存在全局變量、靜態(tài)變量或者代碼中看不到有l(wèi)ock一類的操作,這個動態(tài)連接庫也就肯定不是多線程安全的。選擇了可重入方式,LabVIEW會在最方便的線程內(nèi)運行動態(tài)連接庫函數(shù),一般會與調(diào)用它的VI運行在同一個線程內(nèi)。因為LabVIEW是自動多線程的語言,它也很可能會把動態(tài)連接庫函數(shù)分配一個單獨的線程運行。如果程序中存在沒有直接或間接先后關(guān)系的兩個CLN節(jié)點,LabVIEW很可能會同時在不同的線程內(nèi)運行它們所調(diào)用的函數(shù),也許是同一函數(shù)。對于非多線程安全的動態(tài)連接庫,這是很危險的操作。很容易引起數(shù)據(jù)混亂,甚至是程序崩潰。選擇界面線程方式:因為LabVIEW只有一個界面線程,所以如果所有的CLN設(shè)置都是界面線程,那么就可以保證這些CLN調(diào)用的函數(shù)肯定全部都運行在同一線程下,肯定不會被同時調(diào)用。對于非多線程安全的動態(tài)連接庫,這就保證了它的安全。3.與VI的線程選項相配合如果你的程序中大量頻繁的調(diào)用了動態(tài)連接庫函數(shù),那么效率就是一個非常值得注意的問題了。我曾經(jīng)編寫過一個在LabVIEW中使用OpenGL的演示程序(為了演示我們開發(fā)的“ImportSharedLibrary功能”),對OpenGL的調(diào)用全部是通過CLN方式完成的。由于OpenGL的全部操作必需在同一線程內(nèi)完成,我把所有的CLN都設(shè)置為在界面線程運行的方式。對VI的線程選項沒有修改,還是默認的選項。結(jié)果程序運行極慢,每秒鐘只能刷新一幀圖像,CPU占用100%。但是作為動畫每秒至少25幀才能看著比較流暢。我開始試圖用LabVIEW的profile工具來查找效率低下的VI,結(jié)果居然查找不到。在ProfilePerformanceandMemory工具上顯示的CPU占用時間只有一點點。這個工具竟然顯示不出程序中最耗時的操作在哪里,自然我也對如何優(yōu)化這個程序無從下手了。后來這個演示程序被擱置了一段時間。直到有一天我從同事給我的提供的一些信息中得到了啟發(fā),才突然想通,這些CPU全部被消耗在線程切換中了。我們調(diào)用OpenGL方法是為每個OpenGLAPI函數(shù)包裝一個APIVI,這些APIVI非常簡單,程序框圖就只有一個CLN節(jié)點,調(diào)用相應(yīng)的OpenGL函數(shù)。由于每個VI都是在默認的執(zhí)行線程中運行,而CLN調(diào)用的函數(shù)卻是在界面線程下運行的。所以每次執(zhí)行一次這樣的APIVI,LabVIEW都要做兩次線程切換,從執(zhí)行線程切換到界面線程,執(zhí)行完函數(shù),在切換回執(zhí)行線程。線程切換是比較耗時的。我的演示程序刷新一幀要調(diào)用大約兩千次OpenGLAPIVI,總耗時接近一秒。解決這個問題,要么把所有APIVI中的CLN都改為可重入方式,但編寫程序時要保證所有被調(diào)用的函數(shù)都運行在同一線程內(nèi),這比較困難。比較容易實現(xiàn)的是,把程序中對OpenGL操作相關(guān)的VI也全部都設(shè)置為在界面線程下運行。我選擇的就是后一種方法。改進后的程序,每秒鐘畫30幀圖像也不會占滿CPU。由此,我也想通了另一個問題。就是我曾經(jīng)發(fā)現(xiàn)調(diào)用WindowsAPI函數(shù)遇到的錯誤信息丟失的問題。在調(diào)用某一WindowsAPI函數(shù)返回值為0時,表示有錯誤發(fā)生了。這時你可以調(diào)用GetLastErr和FormatMessage得到錯誤代碼和信息。但是我經(jīng)常遇到的問題是:前一個函數(shù)明明返回值為0,但是隨后調(diào)用的GetLastErr函數(shù)卻無法查到錯誤代碼。我想這一定是看上去兩
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年漁家傲試題及答案
- 2025年專升碩英語試題及答案
- 5年級下冊英語第5單元
- 嘉興風機吊裝施工方案
- 登鸛雀樓寫了詩人的所見
- arm芯片霍爾信號
- 2025年天然植物纖維及人造纖維編織工藝品合作協(xié)議書
- 2025年內(nèi)蒙古通遼市單招職業(yè)傾向性測試題庫1套
- 2025年重慶青年職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫及參考答案1套
- 2025年攀枝花攀西職業(yè)學(xué)院單招職業(yè)技能測試題庫審定版
- 卡通插畫幼兒園國防教育主題班會課程PPT實施課件
- 紅樓夢人物關(guān)系圖譜可A4打印版
- 第一屆全國中學(xué)生地球科學(xué)競賽初賽試題試題含答案
- 石化公司建設(shè)項目竣工文件整理歸檔規(guī)范
- A4線纜標簽數(shù)據(jù)模板
- 加油站電器火災(zāi)應(yīng)急預(yù)案演練記錄
- 沖壓件,汽車表面零件缺陷及原因分析
- 電熔旁通鞍型
- 2022八年級下冊道德與法治全冊知識點梳理
- 工程數(shù)學(xué)線性代數(shù)第一章同濟第五版ppt課件
- 有效溝通(新)-溝通的重要性
評論
0/150
提交評論