Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » sehr genaue Zeitmessung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
20.03.2005, 20:07 Uhr
~Defmaster
Gast


Also ich möchte gerne eine sehr genaue Zeitmessung haben.
Bisher verwende ich clock(); die bingt mir aber nur genauigkeit von einer Hundertstel schön wäre Millisekunden oder Microsekunden.
Ich will damit bestimmte Programmläufe auf ihre schnelligkeit testen.
Ich habe schon von gettimeofday(); und PerfomanceFrequenzy oder so gehört.
Könntet ihr mir ein gutes Beispiel geben wo mit ich eine sehr genau Zeitmessung durchführen kann? Wäre echt lieb.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.03.2005, 20:40 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:

int main(){
LONGLONG Frequency, CurrentTime, LastTime;
double TimeElapsed, TimeScale;
QueryPerformanceFrequency( (LARGE_INTEGER*) &Frequency);
TimeScale = 1.0/Frequency;
QueryPerformanceCounter( (LARGE_INTEGER*) &LastTime);

//do something
for(size_t i=0;i<100000;++i);

QueryPerformanceCounter( (LARGE_INTEGER*) &CurrentTime);
TimeElapsed = (CurrentTime - LastTime) * TimeScale;

std::cout<<"Time elapsed"<<TimeElapsed<<std::endl;
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.03.2005, 21:01 Uhr
~Defmaster
Gast


Wow genau das was ich wollte Danke viel mals.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.03.2005, 21:06 Uhr
~Defmaster
Gast


Eine Frage hät ich dann doch noch:

Wenn ich jetzt ne for schleife mache mit 100 wiederholungen bekomme ich ca. 30625,2 raus.
Nun möcht ich gerne wissen was für ein Wert es ist also ob Millisekunden oder so.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.03.2005, 21:13 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


so wie ichs gepostet hab ist die einheit sekunden...
eine schleife von 0 bis 100 brauch bei mir ca ne microsekunde (wobei ich eher nicht sagen würde das du damit in den genaugkeitsbereich von ner microsekunde kommst aber ne 1/10 millisekunde sollte drin sein)...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 20.03.2005 um 21:15 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.03.2005, 21:20 Uhr
~Defmaster
Gast


Irgendwie schein ich da nich ganz alles zu peilen.
Also wenn ich jetzt ne for schleife von 1 bis 100.000 mache und beim Compiler (Dev-C++)
Kompilieren+ausführen mache zeigt er 31431,7 (variert) an. Wenn ich allerdings die Kompilierte exe starte gib er -2,39883e+012 an.
Bin noch nich so gut in C++ könntest du mir sagen wie das zu stande kommt?
Außerdem würd ich gerne wissen wie ich ne Ausgabe a la 1,23456789 Sekunden bekomme.
Wäre dir sehr Verbunden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.03.2005, 21:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


zeig mal deinen quellcode sonst kann ich dazu nicht viel sagen was du da machst
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.03.2005, 13:59 Uhr
~Defmaster
Gast


Hier der Quellcode der is nurfür test zwecke ich wil wenn ich endlich mal das prinzip erkenne
damit bestimmte codes auf die schnelligkeit der ausführung testen:


C++:
#include<iostream>
#include <windows.h>

using namespace std;

    
int main()
{
    LONGLONG Frequency, CurrentTime, LastTime;
    double TimeElapsed, TimeScale;
    QueryPerformanceFrequency( (LARGE_INTEGER*) &Frequency);
    TimeScale = 1.0/Frequency;
    int i;
    for(i=0;i<=100000;i++)
    {
      cout << i <<endl;
    }

      QueryPerformanceCounter( (LARGE_INTEGER*) &CurrentTime);
      TimeElapsed = (CurrentTime - LastTime) * TimeScale;
      
      cout<<"Time elapsed "<<TimeElapsed<<endl;
    system("pause");
}



Alles so wie du es geschrieben hast.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.03.2005, 14:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du musst natürlich erst einemal in LastTime die startzeit merken an sonsten steht in LastTime irgend zufallswert...
manchmal ist es hilfreich warnings nicht zu ignorieren
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.03.2005, 14:05 Uhr
Th



Es fehlt die Zeile

C++:
QueryPerformanceCounter( (LARGE_INTEGER*) &LastTime);


Daher ist LastTime undefiniert und du kriegst zufällige Ergebnisse.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: