关于优化QT的cpu占用率
引言:在最近的项目中,发现执行QT程序时,CPU占用率奇高,最高高达98%。
1、查看CPU占用率 - 指令
Linux终端输入:top
即可查看当前CPU占用率
2、优化CPU站占用率
遂专门来找谷哥和度娘讨讨经验。
总结目前网上的各种说法,原因有如下几点:
1、在paintEvent函数和update函数使用不规范,或者相互嵌套。【=>导致了没有必要的循环刷新,甚至死循环。】
2、代码逻辑控制的UI控件频繁刷新,或者某个动作频繁执行。【=>UI刷新在一定程度上会对CPU占用率有影响,若频繁刷新控件(不论是重绘还是更新数据),都会十分消耗CPU占用率】
3、复杂的运算,如浮点运算
4、某种死循环
经过排查,以上情况均不属于。一层层剥逻辑,最终发现程序代码实现的某个类导致了CPU占用率的飙升。
细致排查后,发现该类界面有一个QLabel类定义的控件,用来显示当前时间的(且1s刷新一次)。该控件的实时时钟代码如下:
void MyWidgets::InitTime(QLabel *ClockLabel)
{
//时间设置
//设置时间显示的字体
QPalette palette;
palette.setColor(QPalette::WindowText,QColor(10,10,10));
ClockLabel->setPalette(palette);
//定时器
QTimer *CurrentTime = new QTimer(this);
CurrentTime->start(0); //使用定时器信号槽,尽快更新时间的显示
connect(CurrentTime,&QTimer::timeout,[=](){
QDateTime current_time = QDateTime::currentDateTime();
//显示时间,格式为:年-月-日 时:分:秒 周几
QString StrCurrentTime = current_time.toString("yyyy-MM-dd hh:mm:ss dddd");
ClockLabel->setText(StrCurrentTime);
});
}
可以看出,在功能实现函数中,是通过定时器进行实时时间同步和刷新的。而定时器设定的刷新时间是:Timer->start(0); 将该值设为100后,cpu占用率一下从98%降低至10%左右,且界面无操作时,可低至0.3%。
总结:
1、优化QT的CPU占用率的一个思路是实时时钟的定时器。
2、定时器相关的知识点还是要多了解,使用时要认真对待,而不是光靠想。
3、一个简单的修改,就能够让CPU占用率大大降低。所以,性能优化不是难事,但也不是小事。
4、对待自己的代码,要抱着胆大心细的特点,多尝试,多揣摩。定时优化,定时总结。文章来源:https://www.toymoban.com/news/detail-580256.html
希望我的文章能够给你带来一些启发。欢迎+个关注,便于我们实时沟通!文章来源地址https://www.toymoban.com/news/detail-580256.html
到了这里,关于优化QT的CPU占用率的一个思路,全网没看到这么详细的(有代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!