Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
ВнизНедостатки и достоинства кода Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c