Qt程序CPU占用率较高的解决办法

Qt程序CPU占用率较高的解决办法

分析思路

总的来说,Qt程序CPU占用率较高的原因可能有以下几点:

1、在paintEvent中调用update函数,造成无限循环
2、频繁刷新数据
3、复杂的浮点运算
4、死循环
5、paintEvent里操作太多

我遇到这个问题的程序是利用多个子线程(接收子线程)同时接收并解析网口的数据,同时另外一个子线程(融合子线程)对多个子线程解析得到的数据进行融合处理,接收子线程和融合子线程之间通过Qt的信号-槽机制进行数据交互。
通过分析发现,各子线程运行之后均处于死循环状态,即使此时没有待接收/处理的数据,线程也会处于“空转”状态,由此导致了CPU的过分占用。

解决办法

对于上述情况导致的CPU占用率过高问题,可以根据子线程数量以及子线程循环中需要实时处理的数据量的多少来给子线程添加合适的休眠时间。
具体来说,可以使用QThread类中的sleep(或msleep、usleep)成员函数将线程暂时挂起一段时间,指定时间一过,线程将自动唤醒。
当运行中的子线程数量较少时,一般只要在子线程死循环的末尾使用sleep(0);即可,这样理论上虽然不会是线程挂起任何时间,但是该调用会使线程自动放弃当前的时间片,使时间片可以被系统分配给另外的线程,这样就可以有效减少线程占用的CPU资源。
但是若程序中同时运行的子线程较多,使用sleep(0);可能仍然无法降低程序CPU的占用率,这时可以根据子线程循环中需要实时处理的数据量来指定合适的线程挂起时间。
由于我的程序中用到的子线程数量较多,经过测试,使用sleep(0);无法取得明显的效果,最终指定每个子线程在循环的末尾挂起15ms,即:

while(true)
{
	...
	msleep(15);
}
  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值