我的Qt应用程序遇到了一些问题,这个问题非常缓慢而且有些滞后。最初它是在我现在使用的另一台机器上开发的,它似乎在那里工作得很好。现在,我可以看到,当我启动应用程序时,xorg进程的CPU负载非常高(> 25%),尽管它几乎没有做任何事情。
我正在使用两个QGLWidgets以25fps的帧速率绘制2D图形。我这样做的方法是重载paintEvent()函数。我已经读过这种函数会产生无限循环的情况,例如:在函数中创建新对象时。我已经尝试将代码减少到最小但问题仍然存在:
void GLMonitor::paintEvent(QPaintEvent *event)
{
QPainter painter;
painter.begin(this);
painter.setRenderHint(QPainter::Antialiasing);
//aerpainter->paint(&painter, event, elapsed);
painter.end();
}
它不会绘制任何东西(因为它应该因为我注释掉了aerpainter-> paint())但是xorg仍然处于25%的CPU负载且GUI很慢。
定时器的超时信号(周期为25Hz)连接到以下插槽,该插槽应触发paintEvent,因为它在其中一个Qt示例中完成:
void GLMonitor::animate()
{
elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
repaint();
}
以下是一些可能与问题相关的其他观察结果:
有很多kworker和迁移过程也使用了相当多的CPU(总计大约10%-30%)。
我在原始机器上测试了应用程序,但是我注意到不是xorg而是compiz有很高的CPU负载(大约80%),即使它没有绘制任何东西......
更新:我刚刚意识到,当我增加fps时,其他Qt应用程序(如2dpainting演示版)也会滞后,即使我注释掉绘画代码(如上图所示)。所以他们整个问题可能与我的系统有关......?