The Nameless One
|
|
« : 20-03-2011 20:12 » |
|
А случай следующий: мне надо пробежаться по всем файлам внутри каталога, который выберет пользователь. Это действие крайне желательно иллюстрировать прогресс баром - как я могу задать шаг прогресс бара? Ведь пользователь может захотеть "прошерстить" и весь диск, к примеру, 'С'. Как же это делается в программах вроде антивирусов, когда они сканируют файлы - прогресс бар наглядно показывает время процесса.
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #1 : 20-03-2011 21:36 » |
|
The Nameless One, а откуда вообще такое пристрастие к progress bar? Какая задача решается, и какова роль пользователя в этой задаче?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
The Nameless One
|
|
« Ответ #2 : 20-03-2011 23:46 » |
|
Не знаю, какая роль пользователя - мне поставили задачу, чтобы при обходе файлов был прогресс бар.
Добавлено через 4 часа, 5 минут и 47 секунд: В общем, ничего умнее, чем простой обход всех файлов в выбранной директории, чтобы узнать их количество, не придумал. Так и реализовал.
|
|
« Последнее редактирование: 21-03-2011 03:52 от The Nameless One »
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #3 : 21-03-2011 07:17 » |
|
Можно воспользоваться функцией NtQueryDirectoryFile. Сразу получишь список файлов. Правда она появилась только начиная с WinXP.
|
|
« Последнее редактирование: 21-03-2011 07:20 от zubr »
|
Записан
|
|
|
|
baldr
|
|
« Ответ #4 : 21-03-2011 07:56 » |
|
The Nameless One, как ты можешь заметить в тех же антивирусах, а особенно в браузерах - прогрессбар мало когда показывает правильный прогресс - 60% может заполниться за пару секунд, а остальное будет тянуться минут пять.. Это связано как раз с трудностью экстраполировать прогресс на будущее по результатам предыдущих операций.. Вообще прогресс-бар чаще всего используется просто для индикации длительного процесса..
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
zubr
Гость
|
|
« Ответ #5 : 21-03-2011 08:18 » |
|
baldr, не совсем согласен с тобой. Многие программы все таки стараются реально показать длительный процесс. В том же IE (его объектной модели) есть событие OnProgress, которое вполне соответствует загружаемым файлам при загрузке страницы. Да и пользователю удобней иметь реальное представление о процессе, чем тупую анимацию, имхо.
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #6 : 21-03-2011 08:19 » |
|
zubr, я знал что мое замечание вызовет такие ответы Согласен, по возможности надо стараться давать реальную информацию.
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #7 : 21-03-2011 08:34 » |
|
А если честно? Кто-нить, когда-нить видел, чтобы прогресс отображал реальную картину (про тривиальные случаи я не говорю)? Тот же самый IE. "Осталось: 1 сек." может и несколько секунд показываться. 100% согласен с мнением, что прогрессбар нужен только для того, чтобы успокоить пользователя, дескать прога не висит, а чёт там делает. Ну и вселить в него надежду, что конец операции близок, даже, если это не так.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 21-03-2011 08:40 » |
|
Мне даже пришлось один раз делать фуфельный прогрессбар - процедура выполнялась слишком быстро, а пользователь не верил, что уже всё. Пришлось после выполнения процесса тупо "пробегать" прогрессом секунды 3
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #9 : 21-03-2011 09:19 » |
|
Ok, не будем уходить в дебри. В данном конкретном случае, по вопросу ТС, что показывать пользователю при сканировании каталогов - прогресс-бар дошел до 60%, а потом тупо стоит, пока сканирование не закончилось. Хорошо, если весь процесс занимает несколько секунд, а если часы? А может он вообще завис? Или пускать анимированную хрень, которая ничего не отображает, но крутится - типа процесс идет. Но, почему то как пользователи мы хотим видеть, к примеру, при закачке большого файла - сколько там его закачалось, а не просто тупую анимацию.
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #10 : 21-03-2011 09:20 » |
|
zubr, при закачке большого файла не всегда известно сколько осталось. Скажем, в HTTP протоколе иногда может указываться Content-Length, а иногда - нет.
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Вад
|
|
« Ответ #11 : 21-03-2011 09:39 » |
|
zubr, чтобы прогресс-бар при проходе по файлам не замерзал, нужно просто отслеживать прогресс по отдельному файлу тоже, если он большой (или обработка медленная). То есть, чтобы приложение тупо раз в 0.5-1 секунду отчитывалось об объёме проделанной работы, и этот объём измерялся достаточно точно.
Например, делаем поиск по содержимому файлов. Тогда оцениваем общий размер директории, а потом в счётчик плюсуем всё, что прошли, включая прочитанный кусок текущего файла.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #12 : 21-03-2011 10:05 » |
|
Вад, да это все понятно. Тут просто возник вопрос для чего вообще нужен прогрессбар. Мое имхо, с точки зрения юзабилити, прогрессбар должен по возможности отображать реальное состояние процесса, ну а ситуации понятно, разные бывают, к примеру, время ожидания сервера из клиента мы врядли сможем учесть.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #13 : 21-03-2011 10:11 » |
|
Но, почему то как пользователи мы хотим видеть, к примеру, при закачке большого файла - сколько там его закачалось, а не просто тупую анимацию. При закачке большого файла известен размер переданного куска и размер всего файла: ХХ кБ из УУУ кБ. А ещё лучше - сколько осталось. А прогрессбары привязывают к таким операциям с отображением времени. И если истёкшее время они ессно показывают правильно, то оставшееся - чистая анимация и ей уже давно никто не верит. Причина простая - процесс является ф-ей многих переменных, а прогрессбар работает как правило с одной. Даже при работе с файлами скорость обработки может меняться в зависимости от загруженности системы, например, доступа к харду. Поэтому "честные" прогрессбары уже давно не показывают никаких количественных данных, а всё остальное не более чем тупая анимация. И, кстати, юзеры уже воспитаны именно на таком восприятии пргрессбаров: да, процесс движется, когда-нить закончится.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
zubr
Гость
|
|
« Ответ #14 : 21-03-2011 10:33 » |
|
При закачке большого файла известен размер переданного куска и размер всего файла: ХХ кБ из УУУ кБ. А ещё лучше - сколько осталось. А прогрессбары привязывают к таким операциям с отображением времени.
Не только время, но и процент выполнения. А процент выполнения, для данного примера может быть вполне точным. Лично меня, как пользователя, всегда больше интересует процент выполнения.
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #15 : 21-03-2011 16:58 » |
|
Я бы progress bar не показывал - показал что-нибудь другое, часики какие-нибудь анимированные или что-нибудь в этом духе.
А если кто-то пришёл и сказал командным голосом: "Чтобы было! И без разговоров!" - можно с рвением, соответствующим командирским замашкам, сделать в лоб.
Если не понравится - объяснить "командиру", что так дела не делаются, что аргументировать надо, разбирать разные варианты, думать и обсуждать.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
The Nameless One
|
|
« Ответ #16 : 21-03-2011 17:23 » |
|
Всем спасибо за советы и дискуссию!
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #17 : 22-03-2011 07:42 » |
|
Я бы progress bar не показывал - показал что-нибудь другое, часики какие-нибудь анимированные или что-нибудь в этом духе. К сожалению, в последнее время часики ассоциируются у юзверов больше с зависанием проги, особенно когда долго. С нас требуют анимашки. Делаем, а чо?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #18 : 22-03-2011 11:38 » |
|
Джон, часики не у мышки, а в окне. Ещё в последнее время даже progress bar делают таким образом, что внутри него прямоугольник бегает туда-сюда вместо показывания процента выполнения.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #19 : 22-03-2011 13:28 » |
|
Аааа, понятно.
Нууу "бегалка" была ещё в Нетскейпе, как наиболее "правдивом" по тем временам в этом плане браузере.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
|