Hallo,
ich habe mir in C++ eine primitive Stoppuhr programmiert. Zur Zeitmessung habe ich
die Befehle QueryPerformanceCounter und QueryPerformanceFrequency verwendet (ganzer Code unten abgedruckt)
Nun gibt es aber ein wesentliches Problem. Entgegen vieler Meinungen, dass damit eine exakte und hochauflösende Zeitmessung möglich ist, erhalte ich zwar eine hochauflösende Zeitmessung aber genau ist sie nicht.
Starte ich das Programm auf zwei unterschiedlichen Rechnern (AthlonXP % PIV) möglichst zeitgleich (ich möchte mich hier auf die Sekunden beschränken ), so habe ich innerhalb von ca. 30 Minuten schon einen Unterschied von ca. 8 Sekunden!!! Das entspricht einem Unterschied von 4ms in einer Sekunde. Wie kann das sein?
Zur weiteren Prüfung meines Programms habe ich andere Stoppuhr – Programme auf beiden Rechnern parallel laufen lassen. Das Ergebnis sind (außer bei einem) wieder unterschiedliche Zeiten.
Stoppuhr-Programme:
PCStopp : unterschiedliche Zeiten auf beiden Rechnern
StoppUhrPro V4.1.0 : unterschiedliche Zeiten auf beiden Rechnern
XNote Stopwatch : gleiche Zeiten auf beiden Rechnern
Eigenes Prog. : unterschiedliche Zeiten auf beiden Rechnern
Erstaunlich ist, dass alle Programme, die unterschiedliche Zeiten auf verschieden Rechnern haben, auf einem Rechner gleiche Zeiten besitzen.
Demnach kann doch kein Programmierfehler vorliegen, sondern es muss an dem PerformanceCounter/-freqency liegen.
XNote Stopwatch geht bei der Zeitmessung wahrscheinlich einen anderen (sicheren) Weg.
Hat jemand schon einmal gleiche Erfahrungen gemacht?
Im Voraus herzlichen Dank
Chris
Prog-Code in Cpp:
#include
#include
int main()
{
LARGE_INTEGER iFreq;
LARGE_INTEGER iBegin1, stop1;
double t1=0;
QueryPerformanceFrequency(&iFreq);
printf(„Press Enter“);
getchar();
printf(„Zeitmessung laeuft…\n“);
QueryPerformanceCounter(&iBegin1);
while (t1