Главная страница
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.026 c
1-79002
Aik
2003-11-12 10:39
2003.11.24
Кнопка вперёд и назад, Twebbrowser


14-79136
Alibaba
2003-10-31 22:28
2003.11.24
Иконки


14-79182
Soft
2003-10-25 01:29
2003.11.24
Есть ли смерть после жизни?


14-79105
snake1977
2003-11-02 14:58
2003.11.24
Учиться, учиться и учиться.....


1-79006
lovres
2003-11-14 10:54
2003.11.24
Zyxel: как моей программы получить №тел входящего звонка?