![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Vinnety |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 8.4.2003 Репутация: нет Всего: нет |
Народ! Подскажите, как сделать точное отображение времени выполнения процесса в ProgressBar (например, выполнение какого - нибуть цикла) ?
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Поставить его на таймер.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Monty |
|
|||
![]() Advanced Lamer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3511 Регистрация: 3.4.2003 Где: Гваделупа Репутация: нет Всего: 27 |
Я так делал, при копировании файла пытался определить примерное время, но так и не получилось -------------------- ... О, вещая моя печаль, О, тихая моя свобода И неживого небосвода Всегда смеющийся хрусталь! |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Если при выполнении цикла, то простенькой формулой:
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
TTimer - достаточно ненадёжная штука, особенно при значениях меньше 1000 при операциях, загружающих процессор в том же потоке. как вариант - можно вынести отработку таймера в отдельный поток с высоким приоритетом и в обработчике отслеживать, например, свойство Position у TFileStream. но вообще, что касается копирования файлов, самый простой вариант - это в цикле читать по частям (ReadBuffer, WriteBuffer) и в том же цикле выводить прогресс копирования. ана таймер - забить вообще.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
создай переменную, например dd, дальше
в событии таймера с интервалом 1000: Var dd: Integer=30; dd:=dd-1; pb3.UserValue:=dd; //pb3 - собственно процессбар Form1.Caption:='Осталось '+IntToStr(dd)+ ' сек.'; if dd=0 then begin timer1.Enabled:=False; Close; end;//if у меня все работает, но у меня, правда, dd - глобальная переменная |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
2 dsergey: для того, чтобы сабж работал, тебе нужно заранее знать, сколько времени займёт копирование файла. а это зависит от массы факторов и корректно это значение отследить невозможно. единственный вариант - считать пропорцией, т.е. в обработчике смотрим, сколько времени прошло и сколько за это время было скопировано, вычисляем текущую скорость копирования, и делим на неё то, что осталось. т.е. по мере работы мы всё время уточняем скорость и оставшееся время. а твой вариант годен только для процессов, время работы которых известно заранее с более/менее реальной точностью.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
а если на процессбар вешать не время, кол-во байтов? я бы так и сделал, ведь размер копируемого файла можно узнать до копирования
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
тогда проще, конечно. просто было сказано "время выполнения процесса", и я зациклился на измерении времени до конца операции
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]()
|
| Правила форума "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. |