Millisekunden ermitteln



  • Eigentlich nicht@Zeitabstände. Aber wie würde ich das tun?



  • Bzw: Wie wandle ich ein "boost::chrono::steady_clock::duration" in Minuten/Sekunden/Millisekunden um?


  • Mod

    dsffsd schrieb:

    Bzw: Wie wandle ich ein "boost::chrono::steady_clock::duration" in Minuten/Sekunden/Millisekunden um?

    sfdfds schrieb:

    Eigentlich nicht@Zeitabstände. Aber wie würde ich das tun?

    Ja was denn nun? Zeitabstände oder nicht?

    Die boost::chrono-Sachen sind direkte Vorbilder für die chrono-Funktionen aus C++11. Benutzung ist daher weitestgehend gleich:
    http://en.cppreference.com/w/cpp/chrono/duration



  • dsffsd schrieb:

    Bzw: Wie wandle ich ein "boost::chrono::steady_clock::duration" in Minuten/Sekunden/Millisekunden um?

    Das ist nur ein Klassentemplate, und auch nicht was du willst.
    Was interessant wäre, ist vielleicht chrono::steady_clock::period , denn das gibt an, wieviele Ticks pro Sekunde vergehen. Bei high_resolution_clock sind das bspw. dann 1000000000 (Eine Milliarde).

    Aber das ist nicht was du willst.

    Ich glaube, du willst einfach die Uhrzeit auf die Millisekunde genau wissen?



  • Für die Refernz:

    boost::chrono::steady_clock::duration duration = boost::chrono::high_resolution_clock::now() - start;
    					mFile
    						<< " " << std::setw(2) << std::setfill('0') << boost::chrono::duration_cast<boost::chrono::hours>(duration).count()
    						<< ":" << std::setw(2) << std::setfill('0') << boost::chrono::duration_cast<boost::chrono::minutes>(duration).count()
    						<< ":" << std::setw(2) << std::setfill('0') << boost::chrono::duration_cast<boost::chrono::seconds>(duration).count()
    						<< ":" << std::setw(2) << std::setfill('0') << boost::chrono::duration_cast<boost::chrono::milliseconds>(duration).count();
    


  • Korrektur

    << ":" << std::setw(3) << std::setfill('0') << boost::chrono::duration_cast<boost::chrono::milliseconds>(duration).count() % 1000;
    


  • So kriegst du schon mal den aktuellen Millisekunden-Stand heraus:

    #include <iostream>
    #include <chrono>
    
    int main()
    {
            using namespace std::chrono;
            high_resolution_clock h;
            std::cout << static_cast<unsigned>((h.now() - system_clock::from_time_t(system_clock::to_time_t(h.now()))).count() * static_cast<float>(1000) / high_resolution_clock::period::den);
    }
    

    Ist also zwischen 0 und 999. Nimmst du dann per to_time_t die Sekunden, Minuten, usw. dann hast du alles 🙂



  • Danke dir 🙂



  • dsffsd schrieb:

    Danke dir 🙂

    Ich mach es übrigens umständlich. Ich seh gleich, ob es nicht einfacher geht (was es bestimmt tut).



  • Ja, so geht es einfacher:

    std::cout << static_cast<unsigned>((h.now() - std::chrono::time_point_cast<std::chrono::seconds>(h.now())).count() * static_cast<float>(1000) / high_resolution_clock::period::den);
    


  • Sone_logoff schrieb:

    Ja, so geht es einfacher:

    std::cout << static_cast<unsigned>((h.now() - std::chrono::time_point_cast<std::chrono::seconds>(h.now())).count() * static_cast<float>(1000) / high_resolution_clock::period::den);
    

    Besser ist vielleicht, die 1000 durch milliseconds::period::den zu ersetzen, ich hab außerdem vergessen, dass ich den Namensraum freigegeben hab', also so:

    std::cout << static_cast<unsigned>((h.now() - time_point_cast<seconds>(h.now())).count() * static_cast<float>(milliseconds::period::den) / high_resolution_clock::period::den);
    

Anmelden zum Antworten