雙緩衝解決高頻率重新整理介面閃爍問題(C )

2021-05-21 20:52:22 字數 1134 閱讀 2152

專案背景

介面包括幾百個終端模擬物件,為自定義多變形控制項,在1/s次與實際終端取樣通訊頻率下,要求軟體實時更新,實際終端有執行、停止、暫停、工作結束、斷電、告警等多種實時模式,軟體介面需要將各種模式用不同背景顏色表示出來,並且將電壓、電流、狀態等引數顯示在模擬終端。

面臨問題:介面重新整理閃爍,讓使用者視覺感覺差!

●初期方法

採用單純開啟雙緩衝

this.setstyle(controlstyles.optimizeddoublebuffer |   

controlstyles.resizeredraw |

controlstyles.allpaintinginwmpaint, true);

根本無法解決問題

●具體解決辦法

a 原理部分:

1 首先通訊、業務處理、介面線程式分開,通訊部分可開啟多個子執行緒後台執行,取樣資料、狀態等。

2業務處理部分的執行緒負責對取樣資料的分析和儲存,以及根據狀態對多個通訊線程進行啟動和停止,也叫就是管理執行緒的執行緒

3 介面執行緒只負責更新介面狀態和與響應使用者互動。幾百個模擬終端全屏都無法顯示完全,採取分組顯示更新,這樣重新整理頻率明顯下降。    

本專案中採用100個模擬終端/組顯示,每個模擬終端定時1s重新整理介面同時讀取記憶體資料。

b實現部分:

1 系統主程式開啟雙緩衝

2 在控制項內部,在onpaint方法中優化雙緩衝

this.setstyle(controlstyles.resizeredraw | controlstyles.opaque, true);  

3 每個控制項必須採取記憶體物件繪製,這樣可以解決40%左右閃爍問題。乙個控制項物件對應乙個模擬終端

控制項內部**實現:

protected override void onpaint(painteventargs e) 

onpaint方法只涉及對重新整理的處理,具體如何觸發重繪方法等需要實際專案中具體分析和把握。

4 控制項自帶定時器定時更新自身狀態,附加乙個狀態量關聯visible來控制定時器是否執行和讀取.

git高頻率命令

我這一生都是堅定不移的唯物主義者 唯有你 我希望有來生 設定name email git config grobal user.name your name git config grobal user.email email example.com 檢視name email git config ...

Linux高頻率命令收集

linux命令 1.跳到文字的最後一行 按 g 即 shift g 2.跳到最後一行的最後乙個字元 先重複1的操作即按 g 之後按 鍵,即 shift 4 3.跳到第一行的第乙個字元 先按兩次 g 4.跳轉到當前行的第乙個字元 在當前行按 0 5.grep r 1.txt 定向 輸出當前目錄下的查詢...

php高頻率面試題

php是hypertext preprocessor的簡稱,是用來開發動態網頁的伺服器指令碼語言。問題 什麼是mvc?mvc是指m model模型 view檢視 control控制器 model 資料資訊訪問層。view view層負責將應用的資料以特定的方式展現在介面上。controller 通常...