作者sb5471 (sb)
看板C_and_CPP
標題[問題] MFC, 大量IO&更新UI, "無回應"現象
時間Sun Nov 26 20:58:34 2017
開發平台(Platform): (Ex: Win10, Linux, ...)
Win7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
MFC
問題(Question):
目前寫一個週邊測試程式 (MFC Dialog), 特點是有大量I/O & UI 更新,
程式大致是外頭包一個 N 萬次的 loop, 每個 loop 做:
(1) 寫test pattern 到週邊, 讀回, 比對
(2) 將最新狀態, 即時更新到 UI
以下按照時間序列
<1> 最初, 發現程式起跑後一段時間, UI 就會"中風" 且若點擊其中 UI 項,
則會顯示 "
無回應" 提示. 當時以為自己coding 錯誤, debug了很久.
<2> 之後, 發現, 在顯示 "
無回應" 提示後, 不去理會, 放著讓程式跑完
每次都能正確執行到結束. 代表非自己 coding 錯誤所造成.
<3> 再接著, Google 到一個
DisableProcessWindowsGhosting() Win API.
套用上去後, UI "中風" 現象已消失, 週邊最新狀態己能即時顯示在 UI.
但現在 UI 無法與使用者互動, 必須傻等所有測試跑完後, UI 才又恢復
能與使用者互動的狀態.
如果中間想中斷測試, 則必須用"工作管理員" 去關 APP.
我的問題:
有沒有方法, 能即時顯示 UI, 且又能保持與使用者互動的解決方式??
餵入的資料(Input):
無
預期的正確結果(Expected Output):
無
錯誤結果(Wrong Output):
無
程式碼(Code):(請善用置底文網頁, 記得排版)
無
補充說明(Supplement):
無
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.134.145
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1511701117.A.503.html
→ galic: multi-thread 11/26 21:03
→ s89227: 不用那麼高頻率的更新UI,人眼分辨不出來 11/26 21:39
→ xam: 這多唸點書就行了.. 太古老的問題 11/26 22:15
→ l8PeakNeymar: 你只叫一個人做事 他當然忙到沒空回報你 11/26 23:01
→ l8PeakNeymar: new一隻thread專門處理雜物 不然只能看UIthread卡死 11/26 23:02
→ Bencrie: 總是會有人把運算跟 UI 寫在同一個 mainloop XD 11/27 00:11
→ feeya: MFC 多執行緒很難看 所以他沒有寫 11/27 12:25
推 Sirctal: 如果是vs 2013以上的話 用C++11的thread吧 11/27 12:29
推 jasonwu23: 計算部分開個thread, thread跑一個while loop, 每次 11/27 17:08
→ jasonwu23: 算好就sendmessage傳給gui更新即可 11/27 17:08
→ jasonwu23: 這樣子每次背景計算時 前面gui還是照樣能動 11/27 17:10
→ F04E: std::thread 11/28 10:05
推 rodion: 大量IO可以考慮asynchronous programming 會有比多執行緒 11/30 10:44
→ rodion: 更好的system performance 11/30 10:44