看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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