Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.011 c
4-79238
SH
2003-09-25 19:25
2003.11.24
Не работает enumprocesses


4-79227
BSL
2003-09-29 11:07
2003.11.24
Чтение физических секторов накопителей


1-78885
Виталя
2003-11-12 16:25
2003.11.24
Прочитать из Word при помощи OLE


14-79171
Іhor Osov'yak
2003-10-31 09:40
2003.11.24
Виртульная война, грязные технологии


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский