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


来自知乎: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程序主线程执行大量计算 界面卡顿,有什么方法优化?)