Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Проблема с GetTickCount   Найти похожие ветки 

 
SkyRanger ©   (2004-01-09 06:58) [0]

Все еще стражаюсь с таймером прорисовки для своего движка, пытался сделать так:

     NewTickCount:=GetTickCount-StartTickCount;
     if (NewTickCount>OldTickCount) then
     begin
       WinPaint(NewTickCount,OldTickCount);       // Прорисовываем окно
       FPSCnt:=FPSCnt+1; // Увеличиваем счетчик FPS
     end;
     OldTickCount:= GetTickCount-StartTickCount;


Что дало замедление с 86 до 75 FPS
Единственное что удивляет - оба значения NewTickCount и OldTickCount я вывожу на экран, так вот они практически идентичны, т.е. всегда одинаковые, хотя по-идее разница должна в тиках быть довольно большая.

Может я что то неправильно делаю или где то недопонимаю???
Как сделать чтобы задержка обеспечивала одинаковую скорость и на P3 и на P4???


 
Delphi5.01 ©   (2004-01-09 07:21) [1]

Dobroe vrema sutok!
Mne ne ponatno po kakoi prichine, znachenia NewTickCount i OldTickCOunt doljni bit raznia. Posle togo kak vi poluchaete znachenie NewTickCOunt proishotit odin if operator, odna matematicheskoe virajenie + prisvaivanie, nu i pererisovka (vso zvisit ot video karti, na skolko on bistra, i bistro delaet pererisovania). A tolko poesle etogo OldTickCOunt prinimaet svoio novoe znachenie. I ni immet ni kakoi raznici kakaika razniza mejdu StartTickCount daje esli 60 minut to raznica mejdu NewTickCount i OldTickCOunt budet doli secundi.


 
SkyRanger ©   (2004-01-09 07:44) [2]

Ну наскоко я понимаю, GetTickCount возвращает количество миллисекунд с начала работы винды:


The GetTickCount function retrieves the number of milliseconds that have elapsed since Windows was started.

DWORD GetTickCount(VOID)

Parameters

This function has no parameters.

Return Values

If the function succeeds, the return value is the number of milliseconds that have elapsed since Windows was started.


Т.е. каждый раз вызывая GetTickCount я получаю новое значение, т.е. NewTickCount и OldTickCount должны довольно сильно отличаться, так как на прорисовку уходит некоторое количество миллисекунд и точно не 1 и не 10!


 
BiN ©   (2004-01-09 10:29) [3]

кривой у тебя алгоритм
я бы сделал

Tick:=0;
repeat
 GC:=GetTickCount;
 if GC>Tick+Interval then
 begin
   ...
   P:=GC;
 end;
until


 
BiN ©   (2004-01-09 10:33) [4]

....т.е. не P:=GC, а Tick:=GC


 
NAlexey ©   (2004-01-09 10:44) [5]

Для этого надо пользоваться QueryPerformanceCounter и QueryPerformanceFrequency:

var
 t1, t2, Fr: Int64;
begin
 QueryPerformanceFrequency(Fr);
 QueryPerformanceCounter(t1);
 {Do smth}
 QueryPerformanceCounter(t2);
 ShowMessage(FormatDateTime("hh:nn:ss,z", ((t2-t1)/Fr)/86400));
end;


 
panov ©   (2004-01-09 13:41) [6]

function TickCount:Int64;
begin
 QueryPerformanceCounter(Result);
end;

function DeltaTickToSeconds(const Delta: Int64):Double;
var
 TickFreq: Int64;
begin
 QueryPerformanceFrequency(TickFreq);
 Result := Delta/TickFreq;
end;


 
VMcL ©   (2004-01-09 14:22) [7]

>>SkyRanger ©  (09.01.04 06:58)

Может быть еще такая проблема: отключи синхронизацию с вертикальной разверткой (VSync).

P. S. Уж очень числа 86 до 75 близко к стандарнтым частотам 85 и 75 Hz.


 
SkyRanger ©   (2004-01-10 04:35) [8]

Спасибо всем! Попробую то что посоветовали, мож и поможет, надеюсь...


 
SkyRanger ©   (2004-01-13 01:34) [9]

Убрал Vsync FPS сразу подскочил в район 256


 
VMcL ©   (2004-01-15 01:35) [10]

>>SkyRanger ©  (13.01.04 01:34) [9]

Отож.



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
3-1077202782
Sasha_M
2004-02-19 17:59
2004.03.28
Как прочитать в Array поле Binary ?


1-1078902844
NPR2
2004-03-10 10:14
2004.03.28
public array of THandle


1-1078617415
Lena19
2004-03-07 02:56
2004.03.28
указатель на переменную


1-1078563986
Talla2k
2004-03-06 12:06
2004.03.28
StringGrid


6-1073994725
Berzercer
2004-01-13 14:52
2004.03.28
Подскажите, пожайлуста, как перехватить нажатие в браузере