Показать сообщение отдельно
Старый 26.10.2008, 19:06   #5
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Организация загрузки ресурсов?

На самом деле всё просто, чтобы рисовать нормальный прогресс бар, нам нужно знать сколько все (по количеству или по объёму) данных мы должны загрузить. Это сделать несложно, можно подсчитать заранее или написать несложный алгоритм подсчёта.

Так же нам нужно в любой момент времени знать сколько уже прочитано (файлов или данных по объёму).

С прогрессом по файлам уже всё ясно, обновляемся между загрузками файлов. Однако есть большой минус, прогресс бар неимеет соответствия масштаба и продолжтительности загрузки, т.е. он нелинеен. Большой файл грузится долго а увеличивает длину прогресс бара так же как и мелкие файлы.

Если мы хотим плавного движение прогремм бара мы должны считать чколько загружено данных в байтах.

Для этого в бмаксе есть всё необходимое. А именно возможность наследования. Если мы пронаследуем поток (а в бмаксе всё загружается именно через него) и зарегистрируем свой протокол, например progress:: , то мы можем сделать хук (hook) ну крюк вопщем... Т.е. мы делаем класс оболочку через которую идёт вся загрузка. Для этого мы реализовываем там все стандартные методы чтения в которых мы и ведём подсчёт байт, после чего вызываем родительский класс через указатель Super . Так же там мы делаем указатель на функцию вызываемую для обновления прогресс бара, присвоив указателю имя реальной функции в коде мы их свяжем. А наш класс-оболочка будет через заданые промежутки времени вызывать эту функцию передавая ей посчитаный процент готовности.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
snikers (26.10.2008)