Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

Недостатки и достоинства кода   Найти похожие ветки 

 
pasha_golub ©   (2003-11-13 13:08) [0]

Иногда выполнение программы требуется приторомзить, например чтобы создать эффект движения объекта по канве. Сначала отрисовываем начальное положение, потом задержка, потом рисуем новый кадр. В таких случаях я всегда использовал Sleep(Delay).
Но однако такой метод не одинаково отрабатывает на разных машинах. Например, скорость отрисовки разная и зависит от аппаратных возможностей машины, следовательно скорость движения объекта по канве в моем примере разная и напрямую зависит от мощности машины.

Возникла проблему решить следующим образом. Сначала код

T := GetTickCount; //получаю текущее время
for i := 1 to 41 do //цикл по отрисовке движения, 41 кадр
begin
Application.ProcessMessages;
inc(T,DropDelay); //DropDelay - время задеркжи одного кадра
while GetTickCount < T do; //аналог Sleep
//Sleep(DropDelay);
Canvas.CopyRect(...); //собственно сама отрисовка кадра
end;

Приблизительно, время отрисовки на разных машинах с помощью такого трюка выровнялось.

Хотелось бы услышать мнения, и может есть более простое и точное решение.

ЗЫ Вариант с TTimer прошу не рассматривать


 
clickmaker ©   (2003-11-13 13:12) [1]

Более точная, чем GetTickCount - QueryPerformanceCounter / QueryPerformanceFrequency
Можно еще рисование в отдельный поток вынести и там юзать Sleep, чтоб не тормозить основной поток


 
Bel ©   (2003-11-13 13:16) [2]

А причем тут разная мощность машин? Ведь в Sleep аргумент - это количество миллисекунд задержки, а уж сколько тактов эти миллисекунды будут занимать, это забота операционной системы. Так что на любых машинах время должно быть примерно одинаково.


 
pasha_golub ©   (2003-11-13 13:24) [3]

2Bel
Время отработи Sleep одинаковое, а время вывода, например, графической информации на экран разное. Это понятно?

2clickmaker
Отдельный поток мне кажется проблемы не решает, вывод-то все равно разное время занимает.

Функции посмотрю, спасибо



Страницы: 1 вся ветка

Текущий архив: 2003.11.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
14-79132
aclon
2003-11-01 09:41
2003.11.24
появились на экране тёмные и светлыеполосы


1-78876
Win error
2003-11-15 05:19
2003.11.24
Документ Word


14-79135
aVast
2003-11-03 11:07
2003.11.24
а круто ли это?


3-78755
trcv
2003-11-03 16:11
2003.11.24
trigger


4-79231
Ich Hasse
2003-09-27 18:55
2003.11.24
Ожидание завершения потока