Für genaue Zeitmessungen gibt es unter Windows den QueryPerformanceCounter. Dieser hat eine sehr gute Auflösung von 0,000838 Millisekunden und ist leicht zu benutzen. Er kann aber von PC zu PC variieren. Durch die gute Auflösung eignet er sich sehr gut für Performancetests. Als erstes müssen wir den Windows-Header includen. Zudem brauchen wir drei LARGE_INTEGER Variablen.
#include <windows.h>
#define WIN32_LEAN_AND_MEAN // <-- Balast abwerfen
LARGE_INTEGER begin, end, freq;
Leider unterstützen ältere Computer diese Art von Zeitmessung noch nicht. Daher überprüfen wir erstmal, ob der PC es unterstützt. Dazu ermitteln wir die Frequenz mit welcher der Timer läuft. Dies geschieht mit der Funktion QueryPerformanceFrequency(LARGE_INTEGER*), gibt sie 0 zurück unterstützt der PC die Hardware-Uhr nicht.
if(QueryPerformanceFrequency(&freq) == 0)
{
// keine Unterstützung :-/
}
Nun können wir, falls der PC den Timer unterstützt die akutelle Zeit mit der Funktion QueryPerformanceCounter(LARGE_INTEGER*) abrufen.
QueryPerformanceCounter(&begin);
Nun will man mit dem Code ja höchstwahrscheinlich die vergangene Zeit messen. Dazu ruft man die Funktion von vorhin noch einmal auf, nur mit &end als Parameter. Nachher kann man die vergangene Zeit in Sekunden ermitteln in dem man begin von end subtrahiert und durch die Frequenz dividiert.
double Vergangene_Zeit = (double)(end.QuadPart - begin.QuadPart) / (double)freq.QuadPart;
Und schon hat man die vergangene Zeit :-)