很耗cpu的算法,长时间运行,怎么做到每秒钟更新一次界面上的progress bar,又不太增加函数时间开销

aj3423 2014-02-19 10:33:23
比如一个纯耗cpu的函数accumulate, 计算 1+2+3+4+...N

uintmax_t accumulate(uintmax_t max) {
uintmax_t ret;
for(uintmax_t i = 1; i <= max; i++) {
ret += i;
}
return ret;
}

1. 假设accumulate(1000000)大约需要10秒,如果在算法里加上QApplication::processEvents()这种,这样函数执行时间大大增加
2. 而且每次循环都processEvents的话,太耗时了,如果 if(i % 10000 ==0) processEvents() 这种条件来判断,就不是按时间更新了,不能做到精确1秒更新一次进度条。

请教有什么好办法
...全文
258 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shn521 2014-02-19
  • 打赏
  • 举报
回复
进度条没有必要那么准确的,结束时间准确就可以了。
shn521 2014-02-19
  • 打赏
  • 举报
回复
用多线程算吧,例如4个线程,每个线程计算max/4个数
Inhibitory 2014-02-19
  • 打赏
  • 举报
回复
用一个线程去定时监控value的值,然后更新progress bar
儿大不由爷 2014-02-19
  • 打赏
  • 举报
回复
你的算法没问题啊,第二个。
彩阳 2014-02-19
  • 打赏
  • 举报
回复
用QtConcurrent框架来解决问题。 每个线程执行一个任务,然后QFutureWatcher类可以监视进度。

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧