namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:include:chrono
no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


kennen:include:chrono [2015-01-26 14:41] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== <chrono> ======
 +Die Bibliothek definiert Typen für [[#Zeitspannen]], [[#Zeitpunkte]] und [[#Uhren]] im Namensraum ''std::chrono'' unabhängig von den im Lauf der Jahrzehnte immer mehr verkürzten Rechnertakten.
 +
 +===== Zeitspannen =====
 +Zeitspannen der Schablone ''duration<Tickzahl, Zeiteinheit>'' werden als Zahlen (Ticks) einer Zeiteinheit dargestellt.
 +Die Typen ''hours'', ''minutes'', ''seconds'', ''milliseconds'', ''microseconds'', ''nanoseconds'' sind als Ganzzahlverhältnisse [[ratio|std::ratio<z,n>]] von Sekunden definiert.
 +
 +<code cpp>
 +#include <chrono>
 +
 +double bilderProTag()
 +{
 +  using namespace std::chrono;
 +  seconds day = hours(23) + minutes(56) + seconds(4);
 +  milliseconds ms = day;
 +  duration<double, std::ratio<1,24>> pics = day;
 +  return pics.count(); 
 +}
 +</code>
 +Grundrechenoperationen und Vergleiche erfolgen weitgehend beim Übersetzen. 
 +Die Umrechnung in kleinere Zeitspanne-Einheiten ist immer möglich, umgekehrt jedoch nur in Gleitkommatypen oder durch einen [[..:lib:duration_cast|Cast]]:
 +<code cpp>
 +nanoseconds ns = ms;
 +minutes m = duration_cast<minutes>(ms); // abrunden
 +</code>
 +
 +===== Uhren =====
 +Die Zeitmessung mit einer Uhr geht von einem willkürlich festgelegten Anfangszeitpunkt (Epoche) aus.
 +Jede Uhrklasse besitzt einen Zahltyp ''rep'', einen Verhältniszahltyp ''period'', einen Zeitdauertyp ''duration'',
 +einen Typ für Zeitpunkte ''time_point'' und eine statische Klassenfunktion ''now()'', 
 +die den aktuellen Zeitpunkt als Zeitspanne seit Beginn der Epoche liefert.
 +
 +Die Uhrtypen ''system_clock'' und ''high_resolution_clock'' sind vordefiniert.
 +Bei ''steady_clock'' sind zudem garantiert, dass die von ihr nacheinander gelieferten Zeitpunkte niemals "rückwärts" laufen.
 +
 +Die Auflösegenauigkeit einer Uhr kann weniger als eine Nanosekunde betragen:
 +<code cpp>
 +template <class Clock>
 +double precision_in_nanoseconds()
 +{
 +  Clock::duration tick(1);
 +  std::chrono::duration<double, std::nano> ns = tick;
 +  return ns.count();
 +}
 +</code>
 +
 +===== Zeitpunkte =====
 +Zeitpunkte ''time_point<Uhr, Zeitspanne>'' sind auf ihre Uhr bezogen:
 +
 +<code cpp>
 +template <class Clock>
 +Clock::rep ticks()
 +{
 +  typename Clock::time_point epoch, now = Clock::now();
 +  typename Clock::duration gone = now.time_since_epoch();
 +  return gone.count();
 +}
 +</code>
 +Die Differenz zweier Zeitpunkte ist die Zeitspanne ''d = t2-t1''.
 +Zu einem Zeitpunkt lässt sich eine Zeitspanne addieren oder subtrahieren.
 +Dies liefert wiederum einen Zeitpunkt ''t2 = t1+d''.
 +Vergleiche ''t1 < t2'' erlauben Formulierungen wie "davor" und "danach".
 +===== Umwandlung in Zeitstempel =====
 +Die Umwandlung in ein Datum und die Anzeige sind in ''<chrono>'' nicht festgelegt.
 +Dafür muss auf die Mittel der Bibliothek [[ctime]] und I/O-Manipulatoren zurückgegriffen werden:
 +
 +<code cpp>
 +#include <iostream>
 +#include <iomanip> // put_time()
 +
 +void vorbei()
 +{
 +  using namespace std::chrono;
 +  system_clock::time_point gestern = system_clock::now() - hours(24);
 +  std::time_t t = system_clock::to_time_t(gestern);
 +  
 +  std::cout << "gestern zur selben Zeit: " << std::put_time(std::localtime(&t), "%F %T") << '\n';
 +
 +</code>
  
kennen/include/chrono.txt · Zuletzt geändert: 2015-01-26 14:41 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki