• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      仿真軟件中的動態(tài)圖像卡頓現(xiàn)象消除方法

      2018-04-14 02:06:00李永成李孟宇
      計算機(jī)時代 2018年4期
      關(guān)鍵詞:風(fēng)葉卡頓進(jìn)程

      李永成,李孟宇

      (1.金肯職業(yè)技術(shù)學(xué)院,江蘇 南京 211156;2.阿德萊德大學(xué))

      0 引言

      仿真軟件除了要求仿真結(jié)果符合或接近實際的結(jié)果外,圖形界面顯示的流暢性也是一個重要的考量指標(biāo)。對于圖形顯示不流暢而出現(xiàn)的卡頓現(xiàn)象,文獻(xiàn)[1]提出了多層貼圖和增加編輯圖層的方案,刷新時只對有圖元變化的圖層進(jìn)行重繪,并給出了在QT環(huán)境下的編程實例,結(jié)果證明其方法是可行的。也有文獻(xiàn)[2]提出采用多線程技術(shù)解決方案,將系統(tǒng)任務(wù)分散到不同的線程來完成,有助于提高CPU的利用率,從而減小顯示滯后、卡頓甚至系統(tǒng)死機(jī)等現(xiàn)象。

      1 卡頓現(xiàn)象原因分析

      影響圖形顯示流暢性的因素可以分為兩種,第一種因素是圖形本身,對于需要處理復(fù)雜大批量圖元的繪圖系統(tǒng),若其動態(tài)刷新效率不高,將難以滿足實時性要求,如一些視頻播放軟件或游戲軟件等,由于緩沖時延的關(guān)系,CPU占用較多,出現(xiàn)畫面斷續(xù)顯示的情況。第二種因素是運算過程,若需要進(jìn)行大量的數(shù)據(jù)運算,并且圖形是根據(jù)運算結(jié)果進(jìn)行動態(tài)顯示時,運算過程將引起卡頓現(xiàn)象。一個典型例子就是電機(jī)控制仿真,當(dāng)按下一個按鈕或者開關(guān)時,軟件需要進(jìn)行邏輯判斷,若線路比較復(fù)雜,涉及到大量的循環(huán)語句,CPU占用時間較長,這種情況下大部分時間畫面是流暢的,只是在仿真動作期間出現(xiàn)卡頓??D現(xiàn)象不僅影響到使用者的視覺效果,還會造成使用者無法判斷是軟件本身的缺陷還是實際結(jié)果。

      對第二種因素引起的卡頓問題,多層貼圖和增加編輯圖層的方案及多線程方案均不能解決,原因是這兩種方案并不能解決運算過程引起的線程阻塞問題。

      基于上述分析,本文提出采用多進(jìn)程技術(shù)解決方案。

      2 多進(jìn)程解決方案

      多進(jìn)程中,每個進(jìn)程都有自己的地址空間,各進(jìn)程是并發(fā)執(zhí)行的,各進(jìn)程不是共享地址空間[3-5],在效率上雖然比多線程低,但由于不共享地址空間,所以不會像多線程那樣出現(xiàn)阻塞現(xiàn)象。

      本方案將圖像或圖形分成兩類:靜態(tài)和動態(tài)。靜態(tài)圖與仿真時間無關(guān),如按鈕、交流接觸器等,動態(tài)圖與仿真時間相關(guān),時間上是連續(xù)變化的,如電機(jī)風(fēng)葉的旋轉(zhuǎn)圖形。方案中,主進(jìn)程顯示靜態(tài)圖并進(jìn)行數(shù)值或邏輯值運算,輔進(jìn)程根據(jù)主進(jìn)程的運算結(jié)果,實時顯示動態(tài)圖,動態(tài)圖疊加于靜態(tài)圖之上,相當(dāng)于兩個圖層,主進(jìn)程的運算時間不管多長,輔進(jìn)程照樣執(zhí)行,不會發(fā)生阻塞,因此可以有效減少卡頓現(xiàn)象。

      3 編程實驗

      基于上述方案,在VC++6.0下編寫電機(jī)控制仿真軟件實驗程序。

      3.1 控制過程概述

      在電機(jī)控制[6]仿真實驗中,將電路分為主電路與控制電路兩部分。當(dāng)按鈕狀態(tài)發(fā)生變化,如按下或釋放時,對電路的連接關(guān)系進(jìn)行判斷,根據(jù)判斷結(jié)果決定電機(jī)的旋轉(zhuǎn)狀態(tài)。如按下啟動按鈕后,若交流接觸器線圈兩端分別連接到三相電源,則線圈得電,交流接觸器主觸頭閉合,然后再判斷電機(jī)的三相是否與電源三相連接,若三相均連接,則電機(jī)根據(jù)相序進(jìn)行正向或反向旋轉(zhuǎn)。電機(jī)旋轉(zhuǎn)分別有啟動、平穩(wěn)運行、制動三個階段。啟動階段,電機(jī)加速旋轉(zhuǎn),制動階段,電機(jī)快速停止。電機(jī)運行狀態(tài)用風(fēng)葉旋轉(zhuǎn)表示,電機(jī)控制示意圖如圖1所示。

      圖1 電機(jī)控制示意圖

      3.2 多進(jìn)程編程實驗

      本實驗在主進(jìn)程motor.exe進(jìn)行元器件的放置、布局及連線等操作完成電氣原理圖繪制。元器件以靜態(tài)位圖或矢量圖顯示,觸頭的閉合與釋放動作是通過兩幅靜態(tài)位圖切換來完成。設(shè)置一個仿真菜單,仿真時根據(jù)按鈕和觸頭等元件的動作刷新位圖,同時啟動輔助進(jìn)程,輔進(jìn)程顯示風(fēng)葉旋轉(zhuǎn)狀態(tài)。程序框圖如圖2。

      圖2 多進(jìn)程電機(jī)仿真流程

      3.2.1 輔進(jìn)程的開啟

      電氣原理圖繪制完成后,在選擇仿真菜單進(jìn)行電氣仿真時開啟輔進(jìn)程fan.exe,代碼如下:

      3.2.2 進(jìn)程間的通信[7-9]

      進(jìn)程間的通信采用文件方式進(jìn)行,主進(jìn)程motor.exe輸出文本,文件中有電機(jī)位置、電機(jī)正反轉(zhuǎn)標(biāo)記、圖像的縮放倍數(shù)、電機(jī)啟動及停止標(biāo)記、電機(jī)刪除等信息,當(dāng)這些信息發(fā)生變化時對文本進(jìn)行更新。在輔進(jìn)程fan.exe中通過定時器函數(shù)讀取文本信息,定時器設(shè)置為50ms。輔進(jìn)程的定時器始終開啟,這樣更新信息就能被實時讀取。

      3.2.3 輔進(jìn)程設(shè)計原理

      圖3 fan.exe設(shè)計流程

      輔進(jìn)程fan.exe是一個基于對話框[10]的程序,在fan.exe進(jìn)程中,首先隱藏主窗體,然后在函數(shù)InitInstance中創(chuàng)建一個不含菜單和任務(wù)欄的透明窗體,并設(shè)置為最高窗口,使其始終在主窗口之上,風(fēng)葉就繪制在這個窗體上。定時器函數(shù)除讀取主進(jìn)程保存的通信文本外,還計算電機(jī)風(fēng)葉旋轉(zhuǎn)的速度及加速度,透明窗體在電機(jī)相應(yīng)位置上顯示。fan.exe的設(shè)計流程框圖見圖3。

      需要說明的是,由于兩個進(jìn)程中的圖形坐標(biāo)系不同,要使用ClientToScreen函數(shù)將電機(jī)客戶坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo),否則風(fēng)葉顯示的位置將不正確。

      3.2.4 輔進(jìn)程的退出

      輔進(jìn)程的存在時間為輔進(jìn)程開啟到主進(jìn)程結(jié)束,主進(jìn)程關(guān)閉時,向前述(3.2.3)通信文本輸出程序關(guān)閉標(biāo)志,輔進(jìn)程讀到該標(biāo)志后,關(guān)閉定時器并退出。

      主進(jìn)程存在期間,當(dāng)仿真停止或電機(jī)刪除時,向通信文本輸出電機(jī)刪除標(biāo)志,此時輔進(jìn)程不應(yīng)該退出,僅摧毀顯示電機(jī)風(fēng)葉的透明窗體。

      3.2.5 卡頓測試

      在fan.exe中加入卡頓測試代碼,代碼中將風(fēng)葉旋轉(zhuǎn)角度(alpha)記錄在一個文件中。測試時分別在啟動、平穩(wěn)運行、制動三個階段,按下按鈕或其他活動元件(指含觸頭動作的手動元件),連接關(guān)系將重新判斷。在Matlab下根據(jù)記錄文本的數(shù)據(jù)繪制旋轉(zhuǎn)角度增量(Δalpha)曲線(圖4)。圖中的“1、2、3、4”標(biāo)記分別表示電機(jī)啟動、平穩(wěn)運行、制動、停止四個階段。

      圖4 多進(jìn)程風(fēng)葉旋轉(zhuǎn)角度增量曲線

      4 實驗結(jié)果分析

      圖4的啟動階段,旋轉(zhuǎn)角度增量呈線性增加,表明風(fēng)葉旋轉(zhuǎn)速度逐步加快。平穩(wěn)運行階段的角度增量為0.8,表明風(fēng)葉勻速旋轉(zhuǎn)。制動階段的增量急劇減小,表明電機(jī)快速制動。標(biāo)記4出現(xiàn)的波動是由于電機(jī)制動時引起的抖動現(xiàn)象。

      在圖4的各階段中,按下控制按鈕后,電機(jī)旋轉(zhuǎn)角度增量沒出現(xiàn)0的情況,說明沒有出現(xiàn)卡頓現(xiàn)象。在整個運行過程中,視覺上感覺不到圖像卡頓,畫面流暢。

      5 結(jié)論

      針對多線程或單進(jìn)程多層貼圖方法不能有效消除數(shù)據(jù)運算引起的卡頓現(xiàn)象問題,本文提出了多進(jìn)程解決方案,方案中將運算過程放于主進(jìn)程,動態(tài)圖像的顯示過程放于輔進(jìn)程,并以電機(jī)控制仿真實驗對方案進(jìn)行了驗證。實驗表明,多進(jìn)程方法對解決該問題是有效的。

      研究中發(fā)現(xiàn),當(dāng)主進(jìn)程因意外終止時,輔進(jìn)程不能同步結(jié)束,需要利用資源管理器來中止,這個問題有待今后研究和解決。

      參考文獻(xiàn)(References):

      [1]鄧子強,王玉玫,鄧紅艷等.基于qt繪圖系統(tǒng)的圖形應(yīng)用優(yōu)化研究與實現(xiàn)[J].軟件,2016.37(12):59-62

      [2]王立偉,劉常波,胡坤等.基于QNX的多線程技術(shù)在船舶嵌入式操縱訓(xùn)練系統(tǒng)中的應(yīng)用[J].現(xiàn)代電子技術(shù),2017.40(20):91-94

      [3]張偉,許海洋,周百順.多進(jìn)程共享的高效哈希表[J].計算機(jī)工程與設(shè)計,2017.38(5):1190-1195

      [4]賈丕軍,賈杰.一種多功能紅外圖像播放軟件的設(shè)計實現(xiàn)[J].電子設(shè)計工程,2014.22(11):185-187

      [5]陶志勇,王如龍,張錦.基于多進(jìn)程的區(qū)域間通信方法[J].計算機(jī)系統(tǒng)應(yīng)用,2013.22(4):174-177

      [6]鄧干銘.電機(jī)控制的常用操作技巧與方法分析[J].長沙鐵道學(xué)院學(xué)報(社會科學(xué)版),2014.15(4):337-338

      [7]田偉,余僉,趙祎驊.VC中利用內(nèi)存映射文件實現(xiàn)進(jìn)程間通信的方法[J].電腦編程技巧與維護(hù),2017.12:24-26

      [8]蘇紅旗,劉官樹.一種基于內(nèi)存共享的高效進(jìn)程間通信機(jī)制[J].新型工業(yè)化,2014.2:67-73

      [9]陶志勇,王如龍,張錦.基于多進(jìn)程的區(qū)域間通信方法[J].計算機(jī)系統(tǒng)應(yīng)用,2013.22(4):174-177

      [10]蔡智明,楊秋瑾.用VC++實現(xiàn)對話框的界面設(shè)計[J].電腦編程技巧與維護(hù),2013.11:12-16

      猜你喜歡
      風(fēng)葉卡頓進(jìn)程
      債券市場對外開放的進(jìn)程與展望
      中國外匯(2019年20期)2019-11-25 09:54:58
      最忠實的守墓犬
      雜文選刊(2019年2期)2019-02-26 01:32:18
      最忠實的守墓犬
      意林繪閱讀(2018年9期)2018-12-28 05:31:04
      最忠實的守墓犬
      意林繪閱讀(2018年9期)2018-10-11 05:48:14
      最忠實的守墓犬
      老樹當(dāng)風(fēng)葉有聲
      海峽姐妹(2018年3期)2018-05-09 08:20:48
      激光透射焊接技術(shù)在塑料離心風(fēng)葉焊接中的應(yīng)用
      焊接式軸流風(fēng)葉的制程與工藝裝備保障
      基于軟PLC的離心風(fēng)葉激光焊接機(jī)控制系統(tǒng)
      社會進(jìn)程中的新聞學(xué)探尋
      米易县| 开江县| 平遥县| 乌审旗| 苏尼特右旗| 明溪县| 商洛市| 章丘市| 同仁县| 前郭尔| 崇州市| 普陀区| 保山市| 青海省| 桐乡市| 汝南县| 巴彦县| 昔阳县| 慈利县| 连城县| 冷水江市| 泾川县| 南木林县| 苍南县| 西藏| 定安县| 丰顺县| 罗定市| 鹿邑县| 新余市| 兰坪| 叙永县| 甘洛县| 莆田市| 盐池县| 巴中市| 四平市| 马龙县| 长兴县| 华安县| 三穗县|