|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.10.2013, 00:57 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Деревья, рекурсия и прогресс.
Доброго времени суток!
Вопрос в целом общий. Есть некое дерево объектов, бездонной глубины: Папки могут содержать в себе другие файлы и папки. У меня удачно получилось сохранять и загружать это в/из XML файла. Даже удалось подсчитать количество элементов в дереве, во всех папках и вложенных папках, включая их самих. Я читаю/записываю из/в файла, рекурсивно. Собственно, как к этому привить прогресс(отображение сохранения/загрузки, визуально)? ЯП не имеет значения, главное мыслю правильную найти... |
08.10.2013, 01:29 | #2 |
Форумчанин
Регистрация: 09.07.2013
Сообщений: 249
|
Функцию обратного вызова всунь, делай туда +1 после записи каждого объекта и получи проценты прогресса по формуле.
% = количество записаных объектов / (количество объектов всего / 100) Неподсчитав заранее количество объектов ты не получиш точных процентов и максимум что сможеш, это получить количество остающихся в процессе обработки объектов с погрешностью, деля размер файла с вычтеным суммарным размером обработанных объектов на средний арифметический размер этих объектов. a - приблизительное количество оставшихся объектов b - размер файла c - сумма размеров обработанных объектов d - количество обработанных объектов a = (b - c) / (c / d)
do not use your brain
Последний раз редактировалось Кащей; 08.10.2013 в 02:14. |
08.10.2013, 06:08 | #3 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Я с деревьями передаю некоторую служебную информацию. Например, родительский узел знает сколько всего узлов ему подчинено. Все узлы находятся в едином хранилище (динамическом массиве), так примеру я знаю сколько всего узлов вообще, сколько из них являются корневыми и еще некоторые плюшки. Вам же для процентного вычисления достаточно знать общее количество сохраняемых/читаемых узлов.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
08.10.2013, 08:16 | #4 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,774
|
Мне кажется, что в общем случае есть два способа, уже упомянутые выше:
|
08.10.2013, 10:29 | #5 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Не совсем все с файлом делается, файл кстати мой. Обёртка для XML, само умеет отображать прогресс загрузки/сброса.
Прогресс нужен уже в run-time, когда дерево живет в масииве. Объект-контейнер знает сколько в нем объектов(внутренний цикл). Переделаю по совету Utkin'а. Цитата:
Последний раз редактировалось Человек_Борща; 08.10.2013 в 10:36. |
|
08.10.2013, 11:20 | #6 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Прогресс бар просто не нужен, вот и всё.
|
08.10.2013, 11:56 | #7 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
или можно сделать прогресс бар без указания процента выполнения.
|
08.10.2013, 12:14 | #8 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
pu4koff, нужен=) Есть очень длительный процесс: экспорт/импорт данных из программы. В эти моменты работу с ПО надо заблокировать юзеру. Повесить "Пожалуймта подождите 100500 часов?"? Нет, лучше индикация прогресса работы. Вот и думаю, как бы это привить.
|
08.10.2013, 14:56 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
|
08.10.2013, 15:17 | #10 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Прогрессбар хороший сделать в большинстве случаев очень сложно. Это при копировании файла можно всё легко реализовать и оно будет близко к реальности, но такие задачи редко в реальности бывают. Никакого толку от прогрессбара, который за минуту на 90% проскочил, а потом полчаса висит на оставшихся 10%. "Ленивая" инициализация или асинхронная загрузка сюда не ложится нормально? Типа подгружаем быстро верхний уровень, показываем пользователю, потом в фоне дерево грузим, пока пользователь тупит или вообще читаем следующий уровень только когда пользователь раскрывает соответствующий элемент.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Прогресс бар | Gudzik11 | Общие вопросы Delphi | 41 | 15.05.2013 10:03 |
Запуск ракеты Прогресс | Alter | Свободное общение | 13 | 18.09.2010 14:04 |
Многопоточность и прогресс | Horus92 | Работа с сетью в Delphi | 5 | 23.05.2010 16:42 |
Прогресс закачки | mish666 | Работа с сетью в Delphi | 7 | 21.01.2008 15:50 |