Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Реализация функции Delay 5

Delphi , Синтаксис , Дата и Время

Реализация функции Delay 5

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure Delay(Milliseconds: Integer);
 {by Hagen Reddmann}
 var
   Tick: DWord;
   Event: THandle;
 begin
   Event := CreateEvent(nil, False, False, nil);
   try
     Tick := GetTickCount + DWord(Milliseconds);
     while (Milliseconds > 0) and
           (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
     begin
       Application.ProcessMessages;
       Milliseconds := Tick - GetTickcount;
     end;
   finally
     CloseHandle(Event);
   end;
 end;

Функция Delay - это процедура Delphi, которая приостанавливает выполнение программы на заданный промежуток времени в миллисекундах. Функция принимает целочисленный параметр Milliseconds, который представляет собой время задержки в миллисекундах.

Вот шаг за шагом, как функция работает:

  1. Она создает событие Windows с помощью CreateEvent. Это событие будет использоваться для приостановки выполнения программы.
  2. Она инициализирует переменную Tick значением текущего счетчика тиков плюс заданное количество миллисекунд. Счетчик тиков получается с помощью GetTickCount.
  3. Она входит в цикл, который продолжается до тех пор, пока не истечет время задержки или не будет сигнализировано событие (т.е., MsgWaitForMultipleObjects возвращает WAIT_TIMEOUT).
  4. Внутри цикла она вызывает Application.ProcessMessages, чтобы обработать любые pending сообщения в очереди сообщений приложения.
  5. Она обновляет оставшееся время задержки, вычитая из оригинального значения Tick текущий счетчик тиков.
  6. Когда цикл выходит, она закрывает handle события с помощью CloseHandle.

Функция спроектирована для эффективности и не блокирует выполнение программы на протяженииextended периода времени. Вместо того, чтобы заниматься busy-waiting (т.е., постоянно проверять время задержки), она использует функцию Windows API (MsgWaitForMultipleObjects) для ожидания события или истечения времени задержки.

Вот некоторые альтернативные решения:

  • Вместо использования GetTickCount, вы можете использовать GetTickCount64, если вам нужно более точное время.
  • Если вам не нужно обрабатывать сообщения во время задержки, можно удалить вызов Application.ProcessMessages и просто ожидать события или истечения времени задержки.
  • Если вам нужно иметь больше контроля над временем задержки, вы можете рассмотреть использование таймера или отдельного потока для управления задержкой.

В целом, функция хорошо спроектирована и обеспечивает хорошую баланс между эффективностью и точностью.

В статье описана реализация функции Delay 5 на языке Delphi, которая позволяет задерживать выполнение кода на указанный промежуток времени.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



:: Главная :: Дата и Время ::


реклама



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

Время компиляции файла: 2024-05-10 07:13:18
2024-05-19 17:05:34/0.01046085357666/2