Главная страница
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.03 c
4-79223
AKA
2003-09-28 16:24
2003.11.24
Mousewheel


1-78879
pasha_golub
2003-11-13 13:08
2003.11.24
Недостатки и достоинства кода


14-79178
Aristarh
2003-10-30 15:45
2003.11.24
Как несколько wav файлов склеить в один?


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


14-79133
xGhost
2003-11-01 10:12
2003.11.24
Давайте поговорим о разработки плагинов