// 4. Combined Delay {
Including the Sleep in the loop prevents the app from hogging
100% of the CPU for doing practically nothing but running around the loop.
}procedure PauseFunc(delay: DWORD);
var
lTicks: DWORD;
begin
lTicks := GetTickCount + delay;
repeat
Sleep(100);
Application.ProcessMessages;
until (lTicks <= GetTickCount) or Application.Terminated;
end;
Here's the translation of the text into Russian:
Процедура PauseFunc - это реализация функции задержки выполнения в Delphi, также известной как "задержка" или "пауза". Эта функция использует вызов API GetTickCount, чтобы получить текущий системный счётчик tick, а затем enters цикл, где она спит на 100 миллисекунд (используя процедуру Sleep) и обрабатывает любые pending приложения сообщения (используя Application.ProcessMessages). Цикл продолжается до тех пор, пока не будет достигнута заданная задержка или приложение будет остановлено.
Вот разбивка того, что код делает:
lTicks := GetTickCount + delay;: эта строка устанавливает локальную переменную lTicks в текущий системный счётчик tick плюс заданная задержка (в миллисекундах). Это значение представляет собой целевое время, когда функция должна завершить свое выполнение.
Цикл repeat: этот цикл будет продолжаться до тех пор, пока не будет достигнута условие в стatement until или приложение будет остановлено.
Внутри цикла:
Sleep(100);: эта строка вызывает программу на паузу выполнения на 100 миллисекунд (0,1 секунды). Это позволяет другим задачам выполняться и помогает предотвратить программу от потребления избыточных ресурсов CPU.
Application.ProcessMessages;: эта строка обрабатывает любые pending приложения сообщения, такие как уведомления о событиях или триггеры таймера.
Цикл будет продолжаться до тех пор, пока не будет достигнута одна из следующих условий:
Текущий системный счётчик tick (GetTickCount) больше или равно целевому времени (lTicks), что указывает на то, что заданная задержка была достигнута.
Application.Terminated истинно, что означает, что приложение было остановлено внешне (например, закрытие окна).
В целом, эта реализация функции задержки выполнения помогает предотвратить зацикливание CPU и позволяет другим задачам выполняться, пока не будет достигнута конкретное количество времени.
В статье описывается реализация функции Delay 4, которая предотвращает зацикливание приложения на выполнении пустого цикла с помощью использования функции Sleep и проверки состояния приложения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS