Nouvelles Du Monde

Temps en C++20 : Introduction à la terminologie Chrono

Temps en C++20 : Introduction à la terminologie Chrono

2024-03-04 12:07:00

Essentiellement, la fonctionnalité de fuseau horaire (C++20) est basée sur la fonctionnalité de calendrier (C++20), elle-même basée sur la fonctionnalité chrono (C++11). Par conséquent, cette terminologie chrono de base commence par les trois composants C++11 que sont l’heure, la durée et l’horloge.

Publicité


Rainer Grimm travaille depuis de nombreuses années en tant qu’architecte logiciel, responsable d’équipe et de formation. Il aime écrire des articles sur les langages de programmation C++, Python et Haskell, mais aime également intervenir fréquemment lors de conférences spécialisées. Sur son blog Modern C++, il parle intensément de sa passion C++.



  • UN temps a un point de départ, ce qu’on appelle l’époque, et une période de temps supplémentaire depuis l’époque.
  • Un Durée est la différence entre deux moments. Le nombre de ticks sur l’horloge définit la durée.
  • Un Horloge a un point de départ (époque) et une coche pour calculer le moment actuel.

La soustraction des temps donne une période de temps. Vous obtenez un nouveau point dans le temps lorsque vous ajoutez une période de temps à un point dans le temps. Un an est la précision typique de l’horloge et la mesure de la durée.

J’utiliserai les trois concepts pour présenter la vie du père du langage de programmation C : Dennis Ritchie, décédé en 2011. Par souci de simplicité, seules les années m’intéressent.



Dennis Ritchie avait 70 ans. La naissance du Christ est l’époque. Si je combine l’époque avec la période, j’obtiens les heures 1941 et 2011. En soustrayant l’heure 1941 de 2011, on obtient la période avec une précision annuelle.

C++11 a les trois horloges std::chrono::system_clock, std::chrono::steady_clock et std::chrono::high_resolution_clock. La durée peut être positive et négative. Chacune des trois montres a une fonction d’adhésion nowqui renvoie l’heure actuelle.

Vous trouverez plus d’informations sur l’heure, la durée et l’horloge dans mes articles précédents :

C++20 ajoute de nouveaux composants à la bibliothèque Chrono :

  • Mourir Moment de la journée est le temps écoulé depuis minuit, divisé en heures, minutes, secondes et fractions de seconde.
  • calendrier représente diverses dates du calendrier telles que l’année, le mois, le jour de la semaine ou le nième jour de la semaine.
  • Un Fuseau horaire représente une heure précise dans une zone géographique spécifique.
  • Un heure zonée combine un instant avec un fuseau horaire.

Honnêtement, le temps est un mystère pour moi. D’une part, chacun de nous a une idée intuitive du temps, mais d’autre part, il est extrêmement difficile de le définir formellement. Par exemple, les trois composantes du temps, de la durée et de l’horloge dépendent les unes des autres.

Tout d’abord, je voudrais présenter les types de données et les littéraux de base.

Par souci d’exhaustivité, cette section contient les types de données de base et les littéraux des normes C++ précédentes.

À côté de l’horloge murale std::chrono::system_clockl’horloge monotone std::chrono::steady_clock et l’horloge la plus précise std::chrono::high_resolution_clock en C++11, C++20 connaît cinq horloges supplémentaires. Le tableau suivant montre les propriétés de toutes les horloges C++ et leur époque.



Les montres std::chrono::steady_clock et std::chrono::file_clock avoir une époque spécifique à la mise en œuvre. Les époques de std::chrono::system_clock, std::chrono::gps_clock, std::chrono::tai_clock et std::chrono::utc_clock commence à 00:00:00. std::chrono::file_clock est l’horloge pour les entrées du système de fichiers.

De plus, C++11 prend en charge le std::chrono::high_resolution_clock. Cette horloge n’est pas implémentée sur toutes les implémentations et constitue simplement un alias pour std::chrono::steady_clock ou std::chrono::high_resolution_clock.

Un instant peut être converti entre les horloges.

Conversion des heures entre horloges

La fonction std::chrono::clock_cast convertit les heures entre les horloges qui ont une époque. Ce sont les horloges std::chrono::system_clock, std::chrono::utc_clock, std::chrono::gps_clock et std::chrono::tai_clock. Également pris en charge std::chrono::file_clock La conversion.

Le programme suivant convertit l’heure 2021-8-5 17:00:00 entre les différentes horloges.

// convertClocks.cpp

#include 
#include 
#include 

int main() {

  std::cout << 'n';

  using namespace std::literals;

  std::chrono::utc_time
    timePoint;
  std::istringstream{"2021-8-5 17:00:00"} 
    >> std::chrono::parse("%F %T"s, timePoint);

  auto timePointUTC 
    = std::chrono::clock_cast(timePoint);
  std::cout << "UTC_time:  " 
    << std::format("{:%F %X %Z}", timePointUTC) << 'n';

  auto timePointSys = 
    std::chrono::clock_cast(timePoint);
  std::cout << "sys_time:  " 
    << std::format("{:%F %X %Z}", timePointSys) << 'n';

  auto timePointFile = 
    std::chrono::clock_cast(timePoint);
  std::cout << "file_time: " 
    << std::format("{:%F %X %Z}", timePointFile) << 'n';

  auto timePointGPS = 
    std::chrono::clock_cast(timePoint);
  std::cout << "GPS_time:  " 
    << std::format("{:%F %X %Z}", timePointGPS) << 'n';

  auto timePointTAI = 
    std::chrono::clock_cast(timePoint);
  std::cout << "TAI_time:  " 
    << std::format("{:%F %X %Z}", timePointTAI) << 'n';

  std::cout << 'n';

}

La fonction std::chrono::parse analyse l'objet Chrono du flux. Marchez dans les lignes suivantes std::chrono::clock_cast le timePoint à l'horloge spécifiée. La ligne suivante affiche l'heure, où la date (%F), la représentation de l'heure locale (%X) et l'abréviation du fuseau horaire (%Z) peut être spécifié. L'un de mes prochains articles approfondira la chaîne de format.



Le résultat en surprendra certains : l’heure GPS est en avance de 18 secondes sur l’heure UTC. L’heure TAI est en avance de 37 secondes sur l’heure UTC et de 19 secondes sur l’heure GPS.

Dans mon prochain article, je continuerai mon voyage à travers les types de données avec des durées et des moments précis.


(moi)

Vers la page d'accueil



#Temps #C20 #Introduction #terminologie #Chrono
1709550782

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ADVERTISEMENT