0

Qt アプリケーションで、非常に遅くて遅延があるという問題が発生しました。もともとは、私が現在使用しているマシンとは別のマシンで開発されたもので、そこでは問題なく動作しているように見えました。現在、アプリケーションを起動すると、ほとんど何もしていないにもかかわらず、xorg プロセスの CPU 負荷が非常に高い (>25%) ことがわかります。

25fps のフレームレートで 2D グラフィックスを描画するために 2 つの QGLWidget を使用しています。私がそれを行う方法は、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 周期) は、Qt の例の 1 つで行われるように、paintEvent をトリガーする次のスロットに接続されます。

void GLMonitor::animate()
{
    elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
    repaint();
}

問題に関連する可能性のあるその他の観察事項を次に示します。

  • かなり多くの CPU を使用する kworker および移行プロセスも多数あります (合計すると、約 10% ~ 30% です)。

  • 元のマシンでアプリをテストしましたが、正常に動作しますが、何も描画していない場合でも、xorg ではなく compiz の CPU 負荷が高い (約 80%) ことに気付きました...

更新: 2dpainting デモのような他の Qt アプリケーションも、(上記のように) 描画コードをコメントアウトしても、fps を上げると遅延することに気付きました。つまり、問題全体が私のシステムに関連している可能性があります...?

4

0 に答える 0