Использование QMathGL для рисования данных в реальном времени?

Застрял, нужно несколько советов или реальных примеров.

1) У меня есть Boost :: Thread Вектор-производитель потока (данные приходят быстро ~ 100 выборок в секунду)
2) Я хочу, чтобы QMathGL рисовал данные по мере их поступления
3) Я не хочу, чтобы мой Qt GUI зависал

Я пытался переместить QMathGL :: update () в отдельный поток — Qt утверждает, что QPixmap не разрешен в отдельном потоке.

Что я должен попробовать, без изменения QMathGL?

Единственное, что приходит на ум — перекрасить по таймеру (fps?), Но мне не нравится это решение, пожалуйста, скажите мне, если я ошибаюсь.

2

Решение

Я также иногда сталкиваюсь с подобной проблемой.

Обычное разрешение, которое я использовал, — это буферизация данных и перерисовка по таймеру. Это идет по линии этого (псевдокод):

void Widget::OnNewData(void *dataSample)
{
this->threadSafebuffer->appendData(dataSample);
}
void Widget::OnTimeout()
{
DataBuffer renderBatch = this->threadSafebuffer->interlockedExchange();
/* Do UI updates according to renderBatch */

}

Это предполагает, что OnNewData вызывается в фоновом потоке. OnTimeout вызывается из QTimer в пользовательском интерфейсе EventLoop. Чтобы предотвратить конфликт, он выполняет взаимоблокированный обмен указателем текущего буфера со вторым буфером. Поэтому не требуется тяжелая синхронизация (например, мьютекст / семафор).

Это будет работать только в том случае, если объем работы по визуализации renderBatch меньше времени ожидания.

0

Другие решения

Я настоятельно рекомендую пойти с таймером. Операции перекраски являются дорогостоящими, и я предполагаю, что ни один пользователь не сможет реально обработать более 10 печатных векторов в секунду. Так что я не вижу реальной выгоды для конечного пользователя, кроме, возможно, того, что дисплей обновляется более «плавно» и вводится для входа. Но вы могли бы добиться этих эффектов гораздо проще с анимацией;)

При перекраске с каждым изменением данных вы получаете раздражающее поведение, которое вы описываете. Обойти это (imho) не стоит хлопот.

2

По вопросам рекламы [email protected]