| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Delay(200); - Что это такое, и что это значит |
| Автор: -Vadim- 23.8.2003, 01:18 |
| Delay(200); - Что это такое, и что это значит. |
| Автор: Vit 23.8.2003, 01:41 |
| Это значит остановиться, подождать 200 vcr и продолжить выполнение |
| Автор: December 23.8.2003, 02:12 | ||
Судя по клаве, имелось в виду 200 мкс. Не совсем так, Vit, 200 мс. |
| Автор: Vit 23.8.2003, 02:27 |
| Сорри - просто очепятка - естественно миллисекунд |
| Автор: -Vadim- 23.8.2003, 02:46 |
| Да? Как я понял это тоже самое что и Sleep(200) что ли. Кстате что то система у меня не останавливаеться при Delay(200). Он случаем не использует какой нибуть отдельный модуль. |
| Автор: Vit 23.8.2003, 04:08 |
| Вообще-то стандартной функции Delay в Delphi нет, это в TP была... |
| Автор: MacTep 23.8.2003, 13:28 |
| Да, ребят, с Delay действительно какой-то глюк. Система останавливается как-то странно. Может даже после того действия, перед которым стоит такая команда. А как работает Sleep? Это не одно и то же или все таки именно одно и тоже? |
| Автор: stab 23.8.2003, 13:38 |
| MacTep в Delphi Delay нет, если ты на Delphi программишь значит ты либо Delay сам написал, либо он где-то в модуле, который в Delphi не входит. Постарайся найти исходный код и сюда выкладывай. |
| Автор: December 23.8.2003, 15:41 | ||
| Sleep отдаёт процессорное время другим процессам. В принципе, sleep - самый корректный способ заснуть. Но! В это время не обрабатываются сообщения программой, что может привести к неприятным последствиям, особенно при работе с DDE. Рекомендую вот такой вариант:
|
| Автор: &-ray 23.8.2003, 15:57 |
| Вопрос вдогонку: а зачем засыпать на 1 мс до и после application.ProcessMessages |
| Автор: Vit 23.8.2003, 16:33 | ||
Если у тебя есть какой-нибудь "показометр" загрузки процессора, попробуй его запустить и сравнить что он будет показывать если твоя программа крутит 2 разных цикла: repeat application.processmessages; until False; и repeat application.processmessages; sleep(20); until False; Фокус в том, что application.processmessages - помогает прорисовке своего приложения, но реально сильно нагружает процессор, т.е. твоё приложение для выполнения application.processmessages забирает время от других процессов, а Sleep наоборот отдаёт время твоего приложения другим программам. Как использовать? - если твоя программа ожидает чего-то извне, например пока наступит какое-то событие в системе, или периодически что-то проверяет, или ожидает окончания выполнения какой-то другой программы то sleep надо вставлять обязательно - это очень сильно ускорит работу всей системы и чужих приложений. Например я в своей программе ждал пока отработает Adobe Distiller - так вот разница в скорости работы дистиллера если я ждал его со sleep в цикле и без sleep (только с application.processmessages) отличалась в несколько раз. Иногда можно использовать Sleep(1) или даже Sleep(0) - это вот что означает - реально CPU выполняет только одну команду в одно время, т.е. многозадачность работает примерно так: Допустим у нас 10 процессов, тогда винда делит (упрощеёно) секунду на 10 неравных частей (в зависимости от приорететов приложений), и заставляет процессор обрабатывать сначала один процесс, затем переключает на обработку следующего процесса и так по кругу... допустим твоей проге выделена 1/5 секунды в каждой секунде, но твоя программа ни фига не делает, только кого-то ждёт, если у тебя стоит application.processmessages - то все это выделенное время расходуется на проверку и выполнение очереди сообщения, мало того так как это весьма напряжная процедура винда даже отнимает время у других процессов и отдаёт твоему. А что же происходит когда стоит repeat application.processmessages; sleep(0); until False; Винда опять таки выделила твоей программе 1/5 секунды, но твоя программа быстро проверила сообщения, а дальше всё остальное время на этой секунде отдала другим приложениям, т.е. sleep(0) означает в текущем цикле прекратить выполнение твоего кода и отдать оставшееся время другому процессу. (PS. Естественно что винда оперирует квантами времени отнюдь не секундной длительности - это я для простоты примера привёл) |
| Автор: December 23.8.2003, 19:05 | ||
Дело в том, что иногда требуется максимально равномерно распределить процессорное время и реакцию на события. До и после аппликатион.процессмессаги можно ставить разные задержки; в частности, до - 1, после - 0. Это было у меня наиболее эффективно. |
| Автор: &-ray 23.8.2003, 23:35 |
| ОК, вроде дошло Я раньше не задумывался о таких тонкостях. |
| Автор: Akella 31.8.2003, 22:30 |
| Да, а иногда одна мальенькая прималенькая мелочь решает почти все! |
| Автор: &-ray 31.8.2003, 23:32 | ||
Тогда это уже не мелочь |