Ein Blog, der sich mit den Multithreadingfähigkeiten von modernem C++ beschäftigt und nicht auf die Zeitbibliothek eingeht, ist nicht vollständig. Insbesondere, wenn ich in den letzten Artikeln öfters mit Hilfe der Zeitbibliothek die Performanz von kleinen Codeabschnitten gemessen habe. Daher gebe ich in diesem Artikel einen Überblick über die Zeitkomponenten Zeitpunkt, Zeitdauer und Zeitgeber. Jeder der drei Komponenten werde ich mir dann in weiteren Artikeln noch genauer anschauen.
Vor der Anwendung der Zeitbibliothek steht erst mal die Theorie.
Zeitpunkt, Zeitdauer und Zeitgeber
Die Zeitbibliothek basiert auf drei Konzepten, die voneinander abhängig sind.
- Zeitpunkt: Der Zeitpunkt wird durch seinen Startpunkt, die sogenannte Epoche und die darauf bezogenen Zeitdauer festgelegt.
- Zeitdauer: Die Zeitdauer ist die Differenz zwischen zwei Zeitpunkten. Sie wird in der Anzahl von Zeittakten angegeben.
- Zeitgeber: Ein Zeitgeber besteht aus einem Startpunkt und einem Zeittakt. Daraus lässt sich der aktuelle Zeitpunkt berechnen.
Zeitpunkte lassen sich miteinander vergleichen. Wird eine Zeitdauer zu einem Zeitpunkt addiert, ergibt dies einen neuen Zeitpunkt. Der Zeittakt spiegelt die Granularität des Zeitgebers wider, in der die Zeitdauer gemessen wird. In unserem Kulturkreis ist Christi Geburt der Startpunkt und ein Jahr ein typischer Zeittakt.
Um die Definitionen anschaulicher zu gestalten, beschreibe ich die drei Konzepte an dem 2011 verstorben Vater der Programmsprache C Dennis Ritchie. Der Einfachheit halber betrachte ich nur die Kalenderjahre.
Die Zeitpunkte 1941 und 2011 werden durch den Startpunkt Christi Geburt und die Zeitdauer definiert. Damit ist Christi Geburt die Epoche in unserer Zeitrechnung. Natürlich ist der Startpunkt auch ein Zeitpunkt. Wird das Jahr 1941 vom 2011 abgezogen, ergibt sich die Zeitdauer. Diese wird in diesem konkreten Fall in der Granularität Jahr gemessen. Dennis Ritchie ist 70 Jahre alt geworden.
Bevor ich in weiteren Artikel die Details zur Zeitbibliothek genauer vorstelle, noch ein paar Anmerkungen um die Konzepte abzurunden. Der Zeitpunkt besteht aus einem Zeitgeber und einer Zeitdauer. Als Zeitgeber stehen in C++ std::chrono::system_clock, std::chrono::steady_clock und std::chrono::high_resolution_clock zu Verfügung. Die Zeitdauer kann positiv oder negativ sein. Bekannte Zeitdauern wie std::chrono::seconds, std::chrono::minutes oder auch std::chrono::hours sind bereits in C++ vordefiniert. Dazu gibt es in C++14 Zeitliterale wie 1s, 1min oder auch 1h. Die Zeitgeber unterscheiden sich in ihrer Genauigkeit (Zeittakt) und ihrem Startpunkt. Der Startpunkt für std::chrono::system_clock ist der 1.1.1970, für die zwei weiteren Zeitgeber der Bootzeitpunkt des Rechners. Mittels der Methode now gibt jeder Zeitgeber den aktuellen Zeitpunkt zurück.
Wie geht's weiter?
Im nächsten Artikel schaue ich mir das Konzept Zeitpunkt genauer an. Dabei werde ich berechnen, wie viel Zeit seit dem 1.1.1970 in verschiedenen Zeitdauern vergangen ist.
Go to Leanpub/cpplibrary "What every professional C++ programmer should know about the C++ standard library". Hole dir dein E-Book. Unterstütze meinen Blog.
Weiterlesen...