[問題] MFC, 大量IO&更新UI, "無回應"現象

看板C_and_CPP (C/C++)作者 (sb)時間8年前 (2017/11/26 20:58), 編輯推噓3(3012)
留言15則, 10人參與, 8年前最新討論串1/1
開發平台(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

11/26 21:03, 8年前 , 1F
multi-thread
11/26 21:03, 1F

11/26 21:12, 8年前 , 2F

11/26 21:39, 8年前 , 3F
不用那麼高頻率的更新UI,人眼分辨不出來
11/26 21:39, 3F

11/26 22:15, 8年前 , 4F
這多唸點書就行了.. 太古老的問題
11/26 22:15, 4F

11/26 23:01, 8年前 , 5F
你只叫一個人做事 他當然忙到沒空回報你
11/26 23:01, 5F

11/26 23:02, 8年前 , 6F
new一隻thread專門處理雜物 不然只能看UIthread卡死
11/26 23:02, 6F

11/27 00:11, 8年前 , 7F
總是會有人把運算跟 UI 寫在同一個 mainloop XD
11/27 00:11, 7F

11/27 12:25, 8年前 , 8F
MFC 多執行緒很難看 所以他沒有寫
11/27 12:25, 8F

11/27 12:29, 8年前 , 9F
如果是vs 2013以上的話 用C++11的thread吧
11/27 12:29, 9F

11/27 17:08, 8年前 , 10F
計算部分開個thread, thread跑一個while loop, 每次
11/27 17:08, 10F

11/27 17:08, 8年前 , 11F
算好就sendmessage傳給gui更新即可
11/27 17:08, 11F

11/27 17:10, 8年前 , 12F
這樣子每次背景計算時 前面gui還是照樣能動
11/27 17:10, 12F

11/28 10:05, 8年前 , 13F
std::thread
11/28 10:05, 13F

11/30 10:44, 8年前 , 14F
大量IO可以考慮asynchronous programming 會有比多執行緒
11/30 10:44, 14F

11/30 10:44, 8年前 , 15F
更好的system performance
11/30 10:44, 15F
文章代碼(AID): #1Q6hfzK3 (C_and_CPP)
文章代碼(AID): #1Q6hfzK3 (C_and_CPP)