| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Application.ProcessMessages |
| Автор: sgentstuff 15.7.2006, 13:22 | ||
сильно ли эта штука тормозит цикл?
|
| Автор: DemoCode 15.7.2006, 13:37 |
Зависит от многих обстоятельств. А опытным путем нельзя проверить? |
| Автор: Palladin 15.7.2006, 13:38 |
| Да, это происходит потому что даже если ты используеш только одну подкоманду допустим Application.ProcessMessages; Помимо неё подгружается ВЕСЬ TApplication, а он состоит из сотен строк кода |
| Автор: sgentstuff 15.7.2006, 13:45 |
| ну помимо того что просто как команда тормозит, еще добавляется тормознутость (т.е я делаю люболе действие прерывается цикл совершается действие и потом он дальше продолжается, сильно ли это тормозит?), опытным не знаю как проверить |
| Автор: BUGOR 15.7.2006, 13:54 | ||
Замерить время выполнения с этой командой и без неё, отнять от первого второе. |
| Автор: Alexeis 15.7.2006, 15:40 |
| sgentstuff, эта команда заставляет обработать все поступившие сообщения и если код обработчика быдет выполнятся секунду, то вся программа в это время будет ждать т.е. все зависит от длительности выполнения кода обработчика. Если это время велико, то обычно создают второй поток и помещают то что должно выполнятся постоянно в него, а обработчики будут выполнятся паралельно с ним. |
| Автор: Voyager 15.7.2006, 18:01 |
| Если в цикле обарабтывается достаточно много элементов, то да, заметно тормозит. |
| Автор: SoWa 15.7.2006, 21:12 | ||
Чтобы измерить время делай gettickcount до и после работы. Потом вычитай.
|
| Автор: sgentstuff 16.7.2006, 07:41 | ||||||
| В общем затестил я это дело, если во время работы программы ничего не делать то время работы одинаково, если же че-то делать с формочкой(например перетаскивать), то время работы заметно увеличивается, короче все понятно, всем спасибо! Добавлено @ 07:47
i:=gettickcount; - это просто число, как его в нормальное время преобразовать? Добавлено @ 07:51
код обработчика будет выполнятся секунду - отчего зависит время выполнения кода обработчика, т.е если я например нажал на формочку и таскаю ее по экрану, вся программа ждет пока я ее отпущу? |
| Автор: BUGOR 16.7.2006, 12:44 | ||
RooR, скачка идёт параллельно, просто инфа не отображается.
Это не просто число, это кол-во миллисекунд с момента последней перезагрузки. Как перевести? Простым делением сначала на 1000(получишь кол-во секунд), потом на 60(минуты) и ещё раз на 60(часы), ну можно ещё на 24, тогда сутки, а потом ещё на 365, это уже года, ну и ещё на 100, века |
| Автор: Palladin 16.7.2006, 12:48 |
Хмм возможно P.S. 2Bugor то что ты сказал это точно????? |
| Автор: BUGOR 16.7.2006, 13:01 |
| RooR, ну проверь, это же не сложно сделать. Поперетаскивай окошко секунд десять, потом отпусти и на прогрессбаре будет скачок, это говорит о том, что во время перетаскивание скачивание файла продолжалось. |
| Автор: Palladin 16.7.2006, 13:13 |
| 2Bugor Гениально P.S. Я так и проверил ещё до того как ты отписал свой последний пост |
| Автор: Mr.Floppy 16.7.2006, 13:33 | ||
Сильно. Поэтому, если ты делаешь какие-то долгие вычисление в цикле, и рисуешь прогрессбар или изменяешь текст кепшена, то делай это не чаще 1 раза в секунду. (кстати, TGauge сам перерисовывается и ему не надо ProcessMessages выполнять) |
| Автор: Mechanic 16.7.2006, 21:23 | ||
| Время отбирает даже при пустой очереди сообщений. Ну, а ежели еще и баттоны на форме давить, ресайзить и мувить её по-ходу... Тут нужно определиться, что важнее, скорость работы цикла, или же скорость реакции интерфейса, и сделать необходимый компромис. Если очень большие вычисления, но важна и скорость отклика интерфейса, то доп. поток покрасивше будет. Хотя, нужно ещё задачу рассмотреть. Может быть просто правильно события и их обработчики распланировать, и всё нормально разместится в одном потоке без тормозов.
Ну, на 365 уже делить не придется, т.к. GetTickCount возвращает dword, и разрядности его хватает что-то около 50 суток, если не ошибаюсь. Хотя слыхал, что есть и 64-битная версия GetTickCount. |