优化QT的CPU占用率的一个思路,全网没看到这么详细的(有代码)

关于优化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、对待自己的代码,要抱着胆大心细的特点,多尝试,多揣摩。定时优化,定时总结。

希望我的文章能够给你带来一些启发。欢迎+个关注,便于我们实时沟通!

你可能感兴趣的:(QT,/,C++开发【教程系列】,qt,开发语言,ui,c++)