Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 12.07.2007, 00:19   #1
jimon
 
Сообщений: n/a
высокоточный таймер в BlitzMax

в Blitz3D давным давно меня добивала одна вещь
почему MilliSecs() возращает целое количество милисекунд

в BlitzMax тоже самое, но как говорится проекту требуются кардинальные меры но обошлось без них ... на офф форуме наткнулся на нужный код, лишний раз изобретать велосипед ето плохо

в общем :
SuperStrict


'Demo:

Global Counter:TPerfCounter=TperfCounter.Create(1000000) 'Create a Counter.
'My PC can handle 1000,000,000 BUT I have been warned it's prob not accurate :)

counter.Start()	'Start the counter.
Global MS:Int=MilliSecs()
Repeat
	Print Counter.Stop()+"  "+(MilliSecs()-ms)/1000	'test counter by checking it next to millisecs.
Until (MilliSecs()-ms)>10000 'do it for 10 secs.

End	'  XD I wonder what this does...

'--------------------------------------- the real timer lib:

Extern "win32"
	Function QueryPerformanceFrequency(LARGE_INTEGER:Long Var)
	Function QueryPerformanceCounter(LARGE_INTEGER:Long Var)
EndExtern


Type TPerfCounter
	Field Frequency:Double
	Field basefrequency:Long
	Field Started:Long
	Field LastValue:Long
	Global perfTime:Long	'Global to the type so that a new Local variable doesnt get created
				'in every function/method. Slight speed increase.
							
							
	Function GetCounter:Long()				'Calls QueryPerformanceCounter directly.
		QueryPerformanceCounter(PerfTime)
		Return PerfTime
	End Function

	
	Function Create:TPerfCounter(Freq:Long)			'Creates a Performance Counter using the Frequency
		Local obj:TPerfCounter=New TPerfCounter
		obj.frequency=Freq
		QueryPerformanceFrequency(obj.baseFrequency)
		obj.Frequency=(obj.basefrequency/obj.Frequency)
		Return OBJ
	End Function

	Method GetTicks:Long()					'Get this counter's ticks (uses Frequency)
		QueryPerformanceCounter(PerfTime)
		Return perftime/frequency
	End Method

	Method Start()						'Start this counter. (Actually, just set its Started property....)
		QueryPerformanceCounter(PerfTime)
		Started=perfTime
	End Method
	
	Method Stop:Long()					'Stop the counter and return the amount of ticks.
		QueryPerformanceCounter(PerfTime)
		LastValue=Long((perftime-Started)/Frequency)
		Return LastValue
	End Method
End Type
еще вычитал сдесь http://www.gamedev.ru/code/forum/?id=59714
что может быть глюки если процессор меняет частоту в real-time
к примеру на ноутах

я на етот код смотрел "одним глазом"
но проверил на работоспособность
не увидел тут ничего чтобы проверяло на новую частоту
так что надо будет дописать наверно ...

в общем рулез полный
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
таймеР? beZ_probleM Основной форум 7 05.01.2009 18:32
BlitzMax & XML dimanche13 Модули для BlitzMax 5 24.11.2008 11:23
Таймер SubZer0 Программирование 4 07.09.2008 00:22
BlitzMax 1.26 johnk BlitzMax 21 18.10.2007 17:05
Таймер Crystal 3D-программирование 11 14.09.2007 05:11


Часовой пояс GMT +4, время: 09:43.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com