您的位置:首页 > 编程语言 > Qt开发

Qt程序主线程执行大量计算 界面卡顿,有什么方法优化?

2016-08-23 22:49 645 查看
来自知乎:http://www.zhihu.com/question/22992772

核心思想:前后台分离

永远不要用主线程做UI之外的任何事情!

方法一:

使用QThread,把逻辑功能打包到子线程。不要继承重写QThread::run,而是把逻辑功能封装为一个QObject,不要在类里写任何死循环,而是用基于信号槽的事件触发思想进行。

这个类里,const读函数允许直接调用,而会发生修改的比如写函数和控制函数,全部做成信号槽——这样的好处是你不需要做任何线程锁,Qt的信号槽会帮你处理好数据同步操作。但代价是信号槽操作为异步操作

方法二:

只跑一次的操作,比如异步操作一个函数,继承重写QRunnable,然后放进Qt的全局线程池里

方法三:

方法二比较麻烦,还要继承类。更方便的是用QtConcurrent模块,传一个函数指针和对应参数进去,就可以自动完成异步执行

作者:诸葛不亮

链接:http://www.zhihu.com/question/22992772/answer/118313056

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

////////////////////////////////

我们公司的代码规范,
要求主线程只能处理用户输入和界面。
甚至网络请求都必须单独开一个线程。

//////////////////////////////

Qt提供了并行计算的模块,实际上就是多线程,参考QtConnCurrent

//////////////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐