C++: Zeit messen für bestimmte Anweisungsblöcke



  • Hi,
    ich will mit C++ die Zeit für Bestimmte Anweisungsblöcke messen.
    Angenommen man hat folgenden Code:

    // ForSchleife.cpp - Quadratzahlen berechnen
    #include <iostream>
    #include <conio.h>
    using namespace std;

    int main()
    {
    int bis;
    int loop;
    int quadr;

    cout << "Quadratzahlen berechnen von 1 bis :" << endl;
    cin >> bis;

    for(loop = 1; loop <= bis; ++loop)
    {
    // Beginn der Zeitmessung
    quadr = loop * loop;
    // Ende der Zeitmessung
    cout << "Das Quadrat von " << loop << " ist: "
    << quadr << endl;
    }

    getch();
    return 0;
    }

    Ich möchte also - wie man es den Kommentaren entnehmen kann - nur die benötigte Zeit für die Rechnung und die Speicherung in "quadr" wissen, nicht für den Rest.
    thx für die Antworten...



  • Der zu messende Code ist imho zu kurz. Das dauert vielleicht 2 Prozessorzyklen (Multiplizieren+zuweisen). Die meiste Zeit wirst du für die Ausgabe verschwenden. Mach mal eine Schleife ohne Ausgabe und dann bis 40.000 und versuch davon die Zeit zu messen. Quasi so:

    #include <windows.h> // nur, wenn du Windows hast, ist ja logisch
    //...
    unsigned int beginTime = ::GetTickCount();
    for (unsigned int i = 1; i < 40000; ++i)
        unsigned int result = i * i;
    unsigned int endTime = ::GetTickCount();
    std::cout << "Time in ms: " << endTime - beginTime << std::endl;
    

    Auf meinem Rechner reicht die Genauigkeit von ::GetTickCount()(ca. 16ms) nicht mal aus um die Zeit zu berechnen (Ergebnis 0ms ;)).

    Gruß
    Don06


Anmelden zum Antworten