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呻吟求| 亚洲视频无码| 久久99蜜桃精品久久久久小说| 毛片久久网站小视频| 国产综合无码一区二区色蜜蜜| 一区二区三区毛片无码| 亚洲综合天堂网| 精品视频在线观看你懂的一区 | 亚洲人成电影在线播放| 欧美乱妇高清无乱码免费| 国产高清在线精品一区二区三区| 婷婷六月激情综合一区| 亚洲香蕉久久| 玩两个丰满老熟女久久网| 国产av剧情无码精品色午夜| 少妇精品在线| 免费看美女自慰的网站| 久久这里只有精品66| 国产日本欧美亚洲精品视| 精品人妻无码区在线视频| 精品国产一区二区三区在线观看 | 国产亚洲第一页| 一区二区三区高清视频国产女人| 欧美午夜精品| 国产91丝袜在线播放动漫 | 精品久久人人爽人人玩人人妻| 国产va欧美va在线观看| 国产无码精品在线| 国产91无码福利在线| 中文一级毛片| 国产不卡网| 国产精女同一区二区三区久| 国产亚洲欧美日韩在线一区| 青青草原国产| 国产色网站| 97在线碰| 2021天堂在线亚洲精品专区| 久精品色妇丰满人妻| 精品人妻一区二区三区蜜桃AⅤ| 日韩欧美中文字幕在线韩免费| 亚洲精品麻豆| 91福利在线观看视频| 亚洲精品国产成人7777| 亚洲视频欧美不卡| 亚洲欧美日韩高清综合678| 国产尤物jk自慰制服喷水| 啦啦啦网站在线观看a毛片| 亚洲无码不卡网| 久久综合丝袜日本网| 国产成人精品一区二区三在线观看| 制服无码网站| 亚洲成人动漫在线| 综合人妻久久一区二区精品 | 国产人人射| 人妻夜夜爽天天爽| 欧美亚洲综合免费精品高清在线观看| 国产精品高清国产三级囯产AV| 亚洲欧州色色免费AV| 亚洲一级毛片免费看| 一级毛片在线免费看| 亚洲日本一本dvd高清| 久久久噜噜噜| 美女无遮挡被啪啪到高潮免费| 亚洲精品人成网线在线| 中文字幕日韩久久综合影院| 国产成人亚洲日韩欧美电影| 四虎精品免费久久| 亚洲最大综合网| 欧美激情第一欧美在线| 免费观看国产小粉嫩喷水| 国产第一色| 久久精品最新免费国产成人| 国产欧美又粗又猛又爽老| 亚洲中文字幕23页在线| 国产精品jizz在线观看软件| 91成人免费观看| 国产99视频精品免费视频7| 伊人久久青草青青综合| 九色在线观看视频| 婷婷五月在线| 欧美精品在线免费| 999福利激情视频 |