Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Процедура задержки выполнения

Delphi , Компоненты и Классы , Процедуры и Функции

Процедура задержки выполнения

Автор: demon-777
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Процедура Delay (как в паскале)

Зависимости: Forms,Windows,SysUtils
Автор:       demon-777, demon-777@yandex.ru, Питер
Copyright:   Выдрана из RxLib
Дата:        23 мая 2002 г.
***************************************************** }

{Delay, не загружающий процессор}

procedure Delay(Value: Cardinal);
var
  F, N: Cardinal;
begin
  N := 0;
  while N <= (Value div 10) do
  begin
    SleepEx(1, True);
    Application.ProcessMessages;
    Inc(N);
  end;
  F := GetTickCount;
  repeat
    Application.ProcessMessages;
    N := GetTickCount;
  until (N - F >= (Value mod 10)) or (N < F);
end;

Пример использования:

Delay(1000); //Задержка на одну секунду

Программный процесс Delay, написанный на языке Delphi, предназначен для отсрока выполнения программы на заданное количество времени в миллисекундах.

Распаковка процесса:

  1. Он инициализирует две переменные N и F в значение 0.
  2. Затем он заходит в цикл, который продолжается до тех пор, пока N не станет больше (Value div 10). В каждой итерации цикла он вызывает функцию SleepEx с задержкой в 1 миллисекунду (True означает асинхронный сон), обрабатывает любые pending-сообщения в очереди сообщений приложения, используя Application.ProcessMessages, и увеличивает значение N.
  3. После завершения цикла он рассчитывает текущее время с помощью функции GetTickCount и хранит его в переменной F.
  4. Затем он заходит в другой цикл, который продолжается до тех пор, пока либо (N - F) >= (Value mod 10) или (N < F) не истинно. Это обеспечивает, что общая задержка соответствует указанному значению.
  5. Внутри второго цикла он обрабатывает любые pending-сообщения с помощью Application.ProcessMessages и проверяет, превышает ли текущее время начальное значение на величину оставшейся задержки.

Пример использования: вызов процедуры Delay(1000) отсрочит выполнение программы на 1 секунду.

Обратите внимание:

  • Процедура не блокирует процессор, поскольку она использует функцию SleepEx с флагом асинхронного сна.
  • Она обрабатывает любые pending-сообщения в очереди сообщений приложения, чтобы обеспечить выполнение других частей программы, пока программа ожидает задержки.

Альтернативное решение может быть использование компонента таймера в Delphi, который позволит указать время задержки и более эффективно обрабатывать истечение времени. Например:

procedure Delay(Value: Cardinal);
begin
  Timer1.Interval := Value;
  Timer1.Start;
end;

Эта APPROACH будет более простой и может быть более эффективной для longer задержек. Однако она требует добавления компонента таймера на форму и настройки его свойств соответствующим образом.

Процедура Delay в Delphi позволяет выполнить задержку программы без загрузки процессора, обеспечивая минимальное влияние на производительность системы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процедуры и Функции ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-13 09:08:03/0.0034410953521729/0