![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| СЭНСЭЙ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Такая задача
Вы программе регулярно выгружатся данные в буфер с периодичностью около секунды. Размер данных до 1000 значение типа real. Нужно что бы chart отображал несколько последних выгрузок, к примеру 600 (10 минут). Я пробовал создать динамический массив на 1000*600 значений типа real и каждую выгрузку сначала в цикле смещать значения внутри массива влево, а затем в конец массива дописывать значения из буфера, а потом очищать chart и вновь заполнять его массивом. На практике этот способ оказался слишком медленным. Подскажите пожалуйста алгоритм порациональней |
|||
|
||||
| kami |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Насколько медленно? Код смещения в студию. По идее, он должен укладываться в одну команду:
Стандартная ф-я Move обладает хорошей производительностью, но если и ее нехватает, можно воспользоваться заменителями с FastCode. Можно и CopyMemory. На закуску для экзотики - CopyArray. Если массив двумерный, могу порекомендовать TList. Логика проста: каждый элемент TList - это динамический одномерный массив (т.е. выборка). При добавлении очередной выборки последовательность следующая:
Хотя, я бы советовал не заниматься постоянным удалением/добавлением данных в кучу. Лучше воспользоваться уже использованными участками памяти:
|
||||||||
|
|||||||||
| СЭНСЭЙ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Спсибо,
естественно я, как новичек, делал сдвиг данных в массиве в цикле. Я не знал о процедуре move. Нужно попробовать. Но думаю проблема останется из за того что все время нужно будет очищать и заносить данные в чарт. Сейчас думаю сделать два чарта и когда один из них наполняется то старый обнуляется и данные зансятся в обнуленный. Мне не совсем понятен последний код. Не могли бы вы дополнить его блоком описания переменных? |
|||
|
||||
| kami |
|
||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
А мне не совсем понятно, какой массив используется. Если одномерный, т.е.
Если для каждой выборки результатов свой массив, т.е.
или (иначе)
то лучше использовать вариант с TList. Поясняю последний:
отображение и саму выборку данных, т.е. процедуры GetNewChartData и DisplayChartData оставляю на вашей совести. Ибо не имею ни малейшего представления об архитектуре приложения. Добавлено @ 12:32 Хотя, общие принципы GetNewChartData можно и изложить:
Это сообщение отредактировал(а) Rrader - 3.5.2009, 14:22 |
||||||||||
|
|||||||||||
| СЭНСЭЙ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Спасибо!
Пока что играюсь с процедурой move. У чартов обнаружил глюк когда их начинаешь скрывать. Решил проблему меняя top чартов. Тому что нужно скрыть присваиваю отрицательное значение top. Все работает отлично даже на скорости 1кГц. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |