Russian Qt Forum
Ноябрь 25, 2024, 04:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: circular buffer для qt  (Прочитано 7994 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Декабрь 03, 2015, 15:20 »

Есть массив данных QList<Data> и в этом массиве всегда size элементов. Каждую секунду данные обновляются, в конец дописывают новые данные вначале стирают, длинна не изменяется. Как это реализовать правильнее?
1. Использовать QList push+pop (будет туда сюда память гонять)
2. Создать вектор/массив и хранить смещение на начало?
« Последнее редактирование: Декабрь 03, 2015, 15:47 от deMax » Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Декабрь 03, 2015, 15:33 »

А QQueue<T> не подходит?
Записан
ibnz
Гость
« Ответ #2 : Декабрь 03, 2015, 15:34 »

http://www.boost.org/doc/libs/1_39_0/libs/circular_buffer/doc/circular_buffer.html
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #3 : Декабрь 03, 2015, 15:41 »

ibnz, circular_buffer оно. Есть решение на qt без буста(конечно легко и самому реализовать, но готовые решения как правило читабельнее - меньше кода)
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #4 : Декабрь 03, 2015, 15:50 »

Спасибо за подсказку.

нашел класс QCircularBuffer, а зачем ему?
Код:
#include <Qt3D>
qmake: QT += 3dcore
Записан
Vamireh
Гость
« Ответ #5 : Декабрь 04, 2015, 06:56 »

Например, QCustomPlot писали не дураки, надо полагать. Там тупо сделано:
Код:
while (queue.size() > needSize) queue.dequeue();
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Декабрь 04, 2015, 07:55 »

1. Использовать QList push+pop (будет туда сюда память гонять)
Используй QList::reserve(int)
Записан

Юра.
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #7 : Декабрь 04, 2015, 08:45 »

Используй QList::reserve(int)
Т.е. в принципе если сделать reserve(size), потом удалить в начале, вставить в конец то с памятью оно играться не буде и операция быстрая будет?

Рисую линию из этого массива через QPainterPath, можно ли у PainterPath удалять начальные элементы или каждый раз его заново создавать?
иногда прежде чем загнать в QPainterPath линию сглаживаю сплайнами(т.е. кол-во точек умножается на splineCount).
p.s. Можно ли рисовать линии с координатами int/double? (У float 25бит на значение иногда не хватает и страдает точность).
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Декабрь 04, 2015, 10:20 »

1. Использовать QList push+pop (будет туда сюда память гонять)
Зачем push/pop если QList заточен и на добавление в голову? (см QList::prepend()) как и на удаление с головы. Странно что фаны не обвинили Вас в "незнании документации" Улыбающийся  Формально самопальный контейнер может быть быстрее, но выигрыш здесь крохи, связываться не стоит

Рисую линию из этого массива через QPainterPath, можно ли у PainterPath удалять начальные элементы или каждый раз его заново создавать?
иногда прежде чем загнать в QPainterPath линию сглаживаю сплайнами(т.е. кол-во точек умножается на splineCount).
p.s. Можно ли рисовать линии с координатами int/double? (У float 25бит на значение иногда не хватает и страдает точность).
Вам же прекрасно известно - сначала надо в букварь заглянуть, а потом вопросы задавать. Где Вы видите методы удаления из QPainterPath? Зато полно методов принимающих QRectF и QPointF
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Декабрь 04, 2015, 10:45 »

2. Создать вектор/массив и хранить смещение на начало?
Хранить смещения на элементы для чтения и записи.
Достоинства кольцевого буфера в том, что он не требует переаллокации совсем. Использование других контейнеров скорее всего потащат за собой переаллокации.
Реализовать колцевой буфер дело нескольких минут.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #10 : Декабрь 04, 2015, 12:40 »

В коре кутей где-то есть приватный циркулярный буффер нормальный (с фиксированным размером).
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #11 : Декабрь 04, 2015, 23:43 »

В коре кутей где-то есть приватный циркулярный буффер нормальный (с фиксированным размером).
это? http://www.prog.org.ru/index.php?topic=29591.msg217470#msg217470
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 23.