999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

LabWindows/CVI多線程技術的應用研究

2012-01-15 06:02:50單體強張萬發
電子設計工程 2012年15期
關鍵詞:程序

單體強,陳 雷,張萬發

(軍械工程學院 彈藥工程系,河北 石家莊 050003)

隨著現代測控系統自動化水平的不斷提高,在大型測控系統的軟件設計過程中,經常會遇到需要多個任務同時工作的情況。若采用傳統的單線程編程方法,軟件系統的執行效率低,系統可靠性差;而多線程技術特別適用于實時多任務系統[1],采用多線程技術,則可以把這些任務分配給多個線程同時執行,在一段時間內并行完成多個任務,提高了軟件的執行效率和系統可靠性。LabWindows/CVI是NI公司提供的一種ANSI C集成開發環境[2],其將多線程技術引入虛擬儀器軟件設計中,有效利用OS和CPU,縮短響應時間、避免擁塞出現,使系統整體性能得到大幅提高。

1 進程與多線程技術

進程通常被定義為應用程序的運行實例。在Win32中,每個進程擁有4 GB的地址空間,此外還有別的資源,如文件、動態內存分配和線程[3]。這些資源在進程中被創建,當進程終止時被釋放。

線程是進程內部可獨立執行單元,是操作系統對系統資源的基本調度單位。多線程是指操作系統支持一個進程中執行多個線程的能力。應用程序中的每個進程都擁有一個主線程和零到多個次線程。同屬于一個進程的線程共享進程的虛擬地址空間,線程之間可共享進程的全局數據和資源。此外,每個線程都單獨保存一些數據結構、CPU寄存器指針和堆棧,以保存線程和執行環境。進程與線程之間的資源分布關系如圖1所示。

圖1 進程與線程之間資源分布關系圖Fig.1 Relation chart of thread and process resources

2 LabWindows/CVI多線程技術運行機制

LabWindows/CVI提供兩種次線程運行代碼的高級機制,分別是線程池 (thread pools)和異步定時器(asynchronous timers)。線程池適用于需要不連續地執行或在循環中執行的任務,而異步定時器適用于在固定時間間隔內執行的任務[4]。

2.1 線程池運行機制

線程在線程池中創建和管理,線程池在主線程中創建。當喚出次線程的控件得到響應時,則在線程池中創建一個次線程,線程函數就通過占用Windows的時間片開始運行,而不再需要程序流程的干預,直到主動或被動停止為止。線程池中對多線程的管理包括創建線程池、創建線程、運行線程函數、釋放線程池資源等。

線程池的運行需要調用Utility Library中的Cmt Schedule Thread Pool Function函數,把在次線程中執行的函數名傳遞給它,使其在線程池的一個次線程中運行。調用Cmt Waitfor Schedule Thread P-ool Function Completion函數使主線程在結束之前處于等待狀態,直到線程函數完成執行。如果主線程在次線程完成執行之前退出,則次線程可能沒有機會完全釋放其占用的資源,次線程中用到的庫函數也可能沒有機會完全釋放。在多線程程序中,調用函數Cmt Release Thread Pool Function ID和函數Cmt Terminate Thread Pool Thread均可退出線程,但是后者無法保證安全退出線程,處理不當有可能導致無法工作。調用函數Cmt New Thread Pool可以創建一個新的線程池,Cmt New Thread Pool會返回線程池的句柄(pool Handle),并把它傳遞給函數CmtSchedule Thread Pool Function的第一個參數。通過Cmt New Thread Pool創建的線程池,在該線程結束時,必須調用Cmt Discard Thread Pool函數釋放該線程池的資源。

2.2 異步定時器運行機制

同步定時器執行線程的優先級比較低[5],當程序線程在別處停滯或響應用戶界面操作時,其發送的定時消息會受到消息隊列和系統時鐘頻率等因素的影響,使定時消息得不到及時的響應和處理,這給基于定時功能的重要操作的編程帶來極大的不利。異步定時器利用Windows多媒體定時器在指定的時間間隔點調用執行函數,異步定時的時間間隔精確,可對設備進行軟件定時。與同步定時器相比,異步定時器使用獨立線程,與程序主線程無關,能夠提供可靠的定時精度,有效避免了由于程序主線程或用戶界面操作而產生的延時,確保了定時器事件的實時性。異步定時器本質上是多線程技術的一種應用形式。

基于LabWindows/CVI,利用同步定時器實現單線程工作模式,如圖2所示,利用異步定時器實現多線程工作模式,如圖3所示,以此比較兩者的軟件執行效率和系統可靠性。單線程模式下,在定時器控件的回調函數中產生數據并在第一個繪圖控件上繪出曲線。多線程模式下,利用異步時鐘產生一個次線程,并在這個線程中產生數據,同時在主線程的定時器控件的回調函數中顯示數據。第二個繪圖控件用來直觀反映定時器控件每次執行代碼所需的時間。在單線程工作模式下,若進行其他界面操作,那么顯示數據操作被推遲,顯示的數據失真,時間間隔大大超過了所界定的200 ms。在多線程工作模式下,因為顯示數據和產生數據分屬兩個不同的線程,所以其它界面操作并未影響數據處理與波形顯示產生。這說明多線程在提高軟件執行效率和系統可靠性等方面均優于單線程。

圖2 單線程工作模式Fig.2 Single threading modle

圖3 多線程工作模式Fig.3 Multithreading modle

3 LabWindows/CVI多線程數據保護機制

數據保護是使用多線程技術時必須解決的一個關鍵問題,保護全局變量、靜態局部變量和動態分配的變量,避免它們被多個線程同時訪問時造成邏輯錯誤。 Lab Windows/CVI提供了3種線程同步數據保護機制:線程鎖(thread lock)、線程安全變量 (thread safe variables)和線程安全隊列(thread safe queues)[6]。線程鎖與線程安全變量數據保護機制是線程同步中對資源的互斥使用;線程安全隊列數據保護機制是線程同步中兩個以上線程基于某個條件來協調它們的活動,一個線程的執行依賴于另一個協作線程的消息或信號,當一個線程沒有得到來自另一個線程的消息或信號時則需等待,直到消息或信號到達才被喚醒。

3.1 線程鎖數據保護機制

在線程鎖數據保護機制中,數據保護是通過將保存數據的變量和OS中的線程鎖對象進行關聯來實現的。在一個特定的時間內,OS只允許一個線程獲得特定的線程鎖對象。程序利用CmtNewLock函數建立線程鎖;利用CmtGetLock函數使指定線程獲得線程鎖控制權。每一個時刻只能有一個線程獲得線程鎖,且每次調用此函數后必須調用CmtReleaseLock函數釋放線程鎖控制權。若程序中使用的線程占有線程鎖較長時間,可能導致其它想獲得線程鎖的線程不得不等待較長時間,降低了程序的可執行性,容易出現阻塞甚至死鎖,效率較低。

3.2 線程安全變量數據保護機制

線程安全變量把數據和OS中的線程鎖定對象組合成為一個整體。因為只需要傳遞線程安全變量句柄,而不是傳遞線程鎖句柄和被保護的變量,所以被保護數據更容易在函數間傳遞。第一次訪問線程安全變量需調用Initialize Var Name函數,在程序中止前調用Uninitialize Var Name函數,調用Cet Pointer To Var Name函數來獨占該變量,可以進行線程安全變量的訪問。訪問結束后,調用Release Pointer To Var Name函數放棄對該變量的占有權,以便其它線程訪問該變量。

3.3 線程安全隊列數據保護機制

線程安全隊列是線程間安全傳輸數組的一種機制,是為多個線程之間傳遞大批量數據提供的一種數據保護措施。線程安全隊列內部采用了鎖策略,有效避免了線程間的沖突、數據錯誤、死鎖等情況的出現。調用Cmt New TSQ函數可以實現線程安全隊列的建立。在調用該函數時,根據線程間傳送數據信息量多少,指定線程安全隊列的項目數和每一項目的大小。寫線程調用函數Cmt Write TSQ Data將一定數量的數據信息寫入到線程安全隊列中,而讀線程調用函數Cmt Read TSQ Data從安全隊列中讀取指定數量的數據信息。

4 LabWindows/CVI多線程技術的應用

某武器系統中所涉及的需進行測控的資源達二十多種。所有測控資源的初始化都是在啟動測控程序時完成的,所有測控資源的關閉是在退出程序時完成的。因此,若用單線程初始化/關閉所有的測控資源會導致程序啟動/退出時間過長,降低了軟件執行效率和系統可靠性。據此,在設計啟動/退出程序時,采用了Lab Windows/CVI多線程技術。限于篇幅,只給出測控程序的啟動流程圖,如圖4所示。

程序啟動后開始執行主線程,主線程啟動兩個次線程來初始化儀器。當次線程初始化儀器完畢后,置該次線程的標志變量為1,然后調用函數Set Sleep Policy,使其處于休眠狀態。在退出程序時,再啟動這兩個次線程關閉測控資源。主線程用于處理用戶界面事件,若用戶界面上的“取消”控件被按下,則應立即終止測控資源的初始化,退出測控程序。如果用單線程編寫測控程序,當出現突發故障需立即終止程序執行時,按下“終止”控件,有時會發現程序不能立即響應用戶界面事件,可能由此造成嚴重后果。采用多線程技術可以很好的解決此問題。在“啟動”控件按下時,系統創建一個新的線程用于自動測控過程,而主線程用于處理用戶界面事件,這樣在需要緊急終止測試程序時,可以保證事件響應的實時性。當主線程接到終止命令時,調用Cmt Terminate Thread Pool Thread函數結束次線程函數的執行,并調用函數Cmt Release Thread Pool Function ID釋放線程函數資源,提高了測控系統的可靠性。

5 結束語

圖4 測控程序啟動過程流程圖Fig.4 Flow chart of the software startup

深入研究了Lab Windows/CVI多線程技術的運行機制及其數據保護機制,通過分析和實際應用表明,該技術提高了操作系統的執行效率和系統的可靠性,在改善系統實時性和最大程度利用多處理器的性能上具有明顯的優勢,對測控技術的發展具有重要的作用。

[1]張毅剛.虛擬儀器軟件開發環境Labwindows/CVI編程指南[M].北京:機械工業出版社,2002.

[2]陳矯陽,陳楸.基于LabWindows/CVI多線程數據采集的研究[J].科學技術與工程,2008,8(9):2459-2461.CHEN Jiao-yang,CHEN Qiu.Study of multithread data acquiring on the base of LabWindows/CVI[J].Science Technology and Engineering,2008,8(9):2459-2461.

[3]成鳳敏,蘇小光.多線程技術在虛擬儀器軟件開發中的應用[J].中國測試技術,2008,34(2):48-50.CHENG Feng-min,SU Xiao-guang.Application of multithreading in virtual instrument software development[J].China Measurement Technology,2008,34(2):48-50.

[4]楊東升,王高峰.多線程技術在虛擬儀器開發軟件LabWindows/CVI中的實現[J].電測與儀表,2005,42(471):39-54.YANG Dong-sheng,WANG Gao-feng.Application of multithreading based on virtual instrument software Lab Windows/CVI[J].Electrical Measurement&Instrumentation,2005,42(471):39-54.

[5]姜守達,吳昌盛,孫震.LabWindows/CVI多線程機制在數據采集中的應用[J].計算機應用,2004,23(8):56-63.JIANG Shou-da,WU Chang-sheng,SUN Zhen.Application of multithreading in data acquisition based on LabWindows/CVI[J].Computer Application,2004,23(8):56-63.

[6]馬青亮,周倫彬,鮑芳.LabWindows/CVI多線程機制在虛擬數字存儲示波器中的應用[J].中國測試技術,2007,34(1):60-62.MA Qing-liang,ZHOU Lun-bin,BAO Fang.Application of Labwindows/CVI multithreading technology in virtual DSO[J].China Measurement Technology,2007,34(1):60-62.

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 亚洲无码精彩视频在线观看| 91精品网站| 国产欧美日韩综合在线第一| 91亚洲精选| 日本91视频| 免费看的一级毛片| 久久亚洲国产最新网站| 欧美色香蕉| 久操线在视频在线观看| 日韩第一页在线| 97av视频在线观看| 99热这里只有精品国产99| 国产三区二区| 无码综合天天久久综合网| 亚洲aaa视频| 中文字幕日韩丝袜一区| 99精品久久精品| 99999久久久久久亚洲| 国产真实乱子伦精品视手机观看| 婷婷五月在线| 视频二区中文无码| 欧洲一区二区三区无码| 无码国内精品人妻少妇蜜桃视频| 欧美精品在线免费| 乱人伦99久久| 亚洲va视频| 国产精品妖精视频| 99久久国产综合精品2020| 毛片基地美国正在播放亚洲 | 成年人久久黄色网站| 国产流白浆视频| 热久久国产| 日韩中文精品亚洲第三区| 黄色网页在线播放| 青青草原国产免费av观看| 国产特级毛片| 中文字幕在线观看日本| 国产乱肥老妇精品视频| www.91在线播放| 99视频国产精品| 日本免费一级视频| 久久综合伊人77777| 亚洲—日韩aV在线| 亚洲手机在线| 亚洲欧美国产高清va在线播放| 国产69精品久久久久孕妇大杂乱| 少妇极品熟妇人妻专区视频| 欧美精品三级在线| 日本欧美一二三区色视频| 99热最新网址| 伊人丁香五月天久久综合 | 国产毛片网站| 啪啪啪亚洲无码| 在线视频精品一区| 欧美日韩精品综合在线一区| 国产a v无码专区亚洲av| 国产高清免费午夜在线视频| 日韩在线永久免费播放| 亚洲婷婷在线视频| 国产主播在线一区| 国内老司机精品视频在线播出| 欧美亚洲欧美区| 丝袜亚洲综合| 免费A∨中文乱码专区| 亚洲三级网站| 亚洲精品麻豆| 国产成人精品一区二区三区| 亚欧美国产综合| 国产v精品成人免费视频71pao| 欧美日韩国产系列在线观看| 91在线一9|永久视频在线| 亚洲欧美日韩另类在线一| 欧美中文一区| 婷婷久久综合九色综合88| 日韩AV手机在线观看蜜芽| 一本无码在线观看| 婷婷开心中文字幕| 美女视频黄频a免费高清不卡| 国产人妖视频一区在线观看| 四虎永久在线视频| 大陆精大陆国产国语精品1024| 国产波多野结衣中文在线播放|