Я столкнулся с некоторыми проблемами с моим приложением Qt, которое очень медленное и медленное. Первоначально он был разработан на другой машине, чем я использую сейчас, и, похоже, там работал нормально. Теперь я вижу, что загрузка процессора процесса xorg довольно высока (> 25%), когда я запускаю приложение, хотя оно почти ничего не делает.
Я использую два QGLWidget для рисования 2D-графики со скоростью 25 кадров в секунду. Я делаю это, перегружая функцию 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%, а графический интерфейс медленный.
Сигнал тайм-аута таймера (с периодом 25 Гц) подключен к следующему слоту, который должен запустить paintEvent, как это делается в одном из примеров Qt:
void GLMonitor::animate()
{
elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
repaint();
}
Вот некоторые другие наблюдения, которые могут быть связаны с проблемой:
Есть много процессов kworker и миграции, которые также используют довольно много процессоров (в сумме это около 10% -30%).
Я протестировал приложение на оригинальной машине, где оно отлично работает, но я заметил, что не xorg, а compiz имеет высокую загрузку процессора (около 80%), даже когда ничего не рисует …
ОБНОВИТЬ: Я только что понял, что другие приложения Qt, такие как демонстрация 2dpainting, также запаздывают, когда я увеличиваю fps, даже когда я закомментирую код рисования (как показано выше). Таким образом, они могут быть связаны с моей системой …?
Задача ещё не решена.
Других решений пока нет …