![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Реализация функции Delay 2Delphi , Синтаксис , Дата и ВремяРеализация функции Delay 2
Оформил: DeeCo procedure Delay(msecs: Longint); var targettime: Longint; Msg: TMsg; begin targettime := GetTickCount + msecs; while targettime > GetTickCount do if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin If Msg.message = WM_QUIT Then begin PostQuitMessage(msg.wparam); Break; end; TranslateMessage(Msg); DispatchMessage(Msg); end; end; { Note: The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days. } Перевод: Процедура Эта реализация использует функцию Windows API Разбивка на части:
Обратите внимание на комментарий: есть проблема с этой реализацией - она использует DWORD-значение для хранения времени, прошедшего, что означает, что если система работает постоянно более 49,7 дней, время будет обернуться в ноль. Это может потенциально вызвать проблемы в определенных ситуациях. Альтернативное решение с использованием
Эта реализация проще и более надежна, так как она использует одиночную операцию ожидания, блокирующую до тех пор, пока не истечет указанное время или не станет сигнализироваться объект ожидания (в этом случае никогда). В статье описывается реализация функции Delay на языке Delphi, которая откладывает выполнение кода на заданное количество миллисекунд, используя для этого цикл проверки времени и обработку сообщений о событиях. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Дата и Время ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |