Microtime



  • Guten Tag,
    Ich möchte bei meiner Cross-Plattform einen timer erstellen der für mich misst wie lange die main funktion gebraucht hat zum laden.

    Mein bisheriger Code:

    time_t start = time(NULL);
    /* MY CODE */
    time_t end = time(NULL);
    std::cout << "Done (" << (end-start) << "s)!" << std::endl;
    

    Nun würde ich gerne einen output mit einer dreistelligen kommazahl (in sekunden) ausgeben = 0.123s

    MFG Felix



  • Aha



  • Das Beispiel macht genau das:
    http://www.cplusplus.com/reference/chrono/high_resolution_clock/now/

    EDIT: C++11 required.

    EDIT2: Wenn du nur die ersten 3 Stellen ausgeben willst kannst du das zB mit <iomanip> machen oder selber runden.


  • Mod

    RedFelix schrieb:

    Nun würde ich gerne einen output mit einer dreistelligen kommazahl (in sekunden) ausgeben = 0.123s

    Level 0 Antwort: Und was ist deine Frage? Womit hast du Schwierigkeiten?
    Level 1 Antwort: cout << setprecision(3) << double(end-start);
    Level 2 Antwort: Obiges ist eine Falle, die Ausgabe mag auf drei Stellen genau sein, aber time misst nur auf ganze Sekunden genau. Genauere timer findest du im chrono-Header.
    Level 3 Antwort: Sowohl time als auch die clocks in chrono "messen" gar nichts, sie gucken nur, wie spät es ist. clock (aus ctime) misst, wie viel Zeit das Programm tatsächlich gebraucht hat. Das heißt, das Ergebnis wird nicht verfälscht, weil zum Beispiel ein anderes Programm parallel läuft (oder genauer: es wird nicht ganz so sehr verfälscht, wie bei den anderen). Viele Betriebssysteme bieten auch noch sehr viel genauere Funktionen für diesen Zweck an.
    Level 4 Antwort: Nutz einfach einen Profiler. Die sind speziell für den Einsatzzweck entwickelt, den du hier schlecht nach programmierst. Sie bieten oft auch sehr viel detailliertere Informationen als eine reine Messung der Laufzeit, so dass du nicht nur weißt, was wie lange braucht, sondern auch warum es so lange braucht.


Anmelden zum Antworten