Funktion die Millisekunden genau ist
-
Naja egal, mir reichen meine 3,5 Millionen Tics pro Sekunde.
-
Danke @ SnorreDev, es funktioniert einwandfrei, und scheint so ungefähr 2 Milliarden Tics pro Sekunde (+-50 % ) zu geben
-
GetTickCount ist auf jeden Fall zu ungenau. Die Genauigkeit liegt bei ca. 15 Millisekunden.
GetTickCount:
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <math.h> #include <stdio.h> void main(void) { unsigned long Old=0; unsigned long New=0; while(true) { Old=New; New=GetTickCount(); if ((New-Old)!=0) printf("%u",New-Old); } }
PerformanceCounter:
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <math.h> #include <stdio.h> class CTimer { public: CTimer(void); ~CTimer(void); public: void Update(void); void Reset(void); public: unsigned long GetHours(void); unsigned long GetMinutes(void); unsigned long GetSeconds(void); unsigned long GetMilliSeconds(void); private: LARGE_INTEGER Frequency; LARGE_INTEGER Start; LARGE_INTEGER Delta; }; CTimer::CTimer(void) { QueryPerformanceFrequency(&Frequency); QueryPerformanceCounter(&Start); Delta.QuadPart=0; } CTimer::~CTimer(void) { } void CTimer::Update(void) { LARGE_INTEGER end; QueryPerformanceCounter(&end); Delta.QuadPart=end.QuadPart-Start.QuadPart; } void CTimer::Reset(void) { Start.QuadPart=Start.QuadPart+Delta.QuadPart; Delta.QuadPart=0; } unsigned long CTimer::GetHours(void) { LONGLONG result; result=Delta.QuadPart/(Frequency.QuadPart*3600); if (result>0xffffffff) result=0xffffffff; return((unsigned long)result); } unsigned long CTimer::GetMinutes(void) { LONGLONG result; result=Delta.QuadPart/(Frequency.QuadPart*60); if (result>0xffffffff) result=0xffffffff; return((unsigned long)result); } unsigned long CTimer::GetSeconds(void) { LONGLONG result; result=Delta.QuadPart/Frequency.QuadPart; if (result>0xffffffff) result=0xffffffff; return((unsigned long)result); } unsigned long CTimer::GetMilliSeconds(void) { LONGLONG result; result=(Delta.QuadPart*1000)/Frequency.QuadPart; if (result>0xffffffff) result=0xffffffff; return((unsigned long)result); } void main(void) { unsigned long Old=0; unsigned long New=0; CTimer timer; while(true) { timer.Update(); Old=New; New=timer.GetMilliSeconds(); if ((New-Old)!=0) printf("%u",New-Old); } }
Wenn man dann was 100 mal pro Sekunde "timen" will, dann reicht GetTickCount nicht aus, da jeder Frame nur 10 ms dauert.
-
spl@t schrieb:
Danke @ SnorreDev, es funktioniert einwandfrei, und scheint so ungefähr 2 Milliarden Tics pro Sekunde (+-50 % ) zu geben
Hoffe, es ist hochaufloesend genug fuer deine Ansprueche