![]() |
![]() ![]() ![]() ![]() |
|
Реализация функции 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 | ||||