作者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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1511701117.A.503.html
1F:→ galic: multi-thread 11/26 21:03
3F:→ s89227: 不用那麽高频率的更新UI,人眼分辨不出来 11/26 21:39
4F:→ xam: 这多念点书就行了.. 太古老的问题 11/26 22:15
5F:→ l8PeakNeymar: 你只叫一个人做事 他当然忙到没空回报你 11/26 23:01
6F:→ l8PeakNeymar: new一只thread专门处理杂物 不然只能看UIthread卡死 11/26 23:02
7F:→ Bencrie: 总是会有人把运算跟 UI 写在同一个 mainloop XD 11/27 00:11
8F:→ feeya: MFC 多执行绪很难看 所以他没有写 11/27 12:25
9F:推 Sirctal: 如果是vs 2013以上的话 用C++11的thread吧 11/27 12:29
10F:推 jasonwu23: 计算部分开个thread, thread跑一个while loop, 每次 11/27 17:08
11F:→ jasonwu23: 算好就sendmessage传给gui更新即可 11/27 17:08
12F:→ jasonwu23: 这样子每次背景计算时 前面gui还是照样能动 11/27 17:10
13F:→ F04E: std::thread 11/28 10:05
14F:推 rodion: 大量IO可以考虑asynchronous programming 会有比多执行绪 11/30 10:44
15F:→ rodion: 更好的system performance 11/30 10:44