Главная страница
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.035 c
4-79238
SH
2003-09-25 19:25
2003.11.24
Не работает enumprocesses


1-78916
killer
2003-11-12 16:10
2003.11.24
Где можно скачать RXLib для Delphi7


14-79181
esVer
2003-10-30 10:05
2003.11.24
Передача сообщений в чужое окно


6-79099
Петр
2003-09-30 04:38
2003.11.24
Где взять документацию по использованию компонента idPOP3?


3-78779
Alex-kosmonavt
2003-11-05 14:07
2003.11.24
Excel