timestamp: milliseconds



  • hallo,

    ich möchte eine timestamp Funktion schreiben, die zeit in folgenden Format ausgibt. z.B. Sat May 20 15:21:51:202 2000

    Der Codefragment:

    void timestamp() {
    	time_t actual_time;
    	time(&actual_time);
    	printf( "\n%s\n", asctime( localtime( &actual_time ) );
    }
    

    Ich habe auch andere Zeitfunktionen Ausprobiert, aber schaffe nicht auch Millisekunde - Ausgabe.

    grüße



  • das könnte dir weiter helfen.



  • Ich finde es seltsam wie hier boost zum Quasi-Standard erklärt wird. http://qt-project.org/doc/qt-4.8/QTime.html könnte auch helfen, ist aber völliger Overkill.
    Prinzipiell gibt es in C/C++ keine Standardfunktion, die die Zeit auf die Millisekunde genau zurück gibt, daher bist du auf das Betriebssystem angewiesen oder benutzt eine Bibliothek, die das Betriebssystem für dich fragt.

    GetLocalTime funktioniert unter Windows ganz gut und es ist leicht damit ein Datumsstring zu bauen. Dann gibt es noch GetTickCount, was nur auf +- 16ms gehen soll, was wahrscheinlich reicht. Ansonsten gibts noch Performance Counter, die genauer und etwas schwieriger zu benutzen sind.



  • nwp3 schrieb:

    Ich finde es seltsam wie hier boost zum Quasi-Standard erklärt wird.

    wieso quasie-standard ? es ist eine möglichkeit, es zu lösen. es gibt auch andere möglichkeiten, aber das ist eine die portable ist. nicht wie dein vorschlag über gettickcount oder so nen windows zeugs.

    außerdem steht in der forenbeschreibung folgendes:

    Fragen zu Funktionen und Abläufen in C++ (ISO-C++, C++98, C++03, C++0x, C++11), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows/Linux-Programmierung hier posten!



  • Das ist die Chrono Variante (sollte so in Boost übertragbar sein):

    #include <iostream>
    #include <windows.h>
    #include <chrono>
    
    int main()
    {
            while(true)
            {
                    using namespace std::chrono;
    
                    //Hier die Chrono-Variante:
                    auto p1 = system_clock::now();
                    auto millisekunden = duration_cast<milliseconds>(p1.time_since_epoch()).count() - duration_cast<seconds>(p1.time_since_epoch()).count() * 1000;
    
                    //Hier die Windows-Variante:
                    SYSTEMTIME t;
                    GetSystemTime(&t);
    
                    std::cout << millisekunden << "=" << t.wMilliseconds << '\n';
            }
    }
    

    Ich sehe da nur gleiche Zahlen...



  • Der Punkt mit Chrono ist, dass wenn du einen C++11 kompatiblen Compiler hast, das auch ohne Boost oder WinAPI sondern nur mit Standardmitteln lösbar ist.


Log in to reply