Chrono i C++

er en C++-header som gir en samling av typer og funksjoner å jobbe med tiden. Det er en del av C++ Standard Template Library (STL) og det er inkludert i C++11 og senere versjoner.

gir tre hovedtyper av klokker: system_clock steady_clock og high_resolution_clock. Disse klokkene brukes til å måle tid på ulike måter.

system_clock representerer den systemomfattende sanntidsveggklokken. Det påvirkes av systemets tidsjusteringer.
steady_clock representerer en monotont økende klokke som ikke påvirkes av endringer i systemtiden.
high_resolution_clock er klokken med kortest avkryssingsperiode tilgjengelig på systemet.

gir også en samling av varighetstyper inkludert varighet som kan brukes til å representere en varighet av tid. Rep er representasjonstypen (som int eller long) og Periode er forholdet mellom varigheten (som nanosekunder eller sekunder).
I tillegg gir en samling av tidpunkttyper inkludert time_point som kan brukes til å representere et tidspunkt. Klokke er klokketypen (som system_clock) og Duration er varighetstypen (som sekunder)

Chrono-biblioteket brukes til å håndtere dato og klokkeslett. Dette biblioteket ble designet for å håndtere det faktum at tidtakere og klokker kan være forskjellige på forskjellige systemer og dermed forbedres over tid når det gjelder presisjon. Det unike med chrono er at det gir en presisjonsnøytralt konsept ved å skille varighet og tidspunkt (tidspunkt) fra spesifikke klokker. chrono er navnet på en header og også på et sub-namespace: Alle elementene i denne headeren (bortsett fra common_type-spesialiseringene) er ikke definert direkte under standard-navneområdet (som de fleste av standardbiblioteket), men under std::chrono navneområde . Elementene i denne overskriften omhandler tid. Dette gjøres hovedsakelig ved hjelp av tre konsepter:

Varighet

Et varighetsobjekt uttrykker et tidsrom ved hjelp av en telling som et minutt to timer eller ti millisekunder. For eksempel kan '42 sekunder' representeres av en varighet som består av 42 tikker av en 1-sekunds tidsenhet. 

CPP
   // C++ program to illustrate the utility    // function duration::count   #include       #include      int     main     ()   {      using     namespace     std  ::  chrono  ;      // std::chrono::milliseconds is an       // instantiation of std::chrono::duration:- 1 second      milliseconds     mil  (  1000  );             mil     =     mil  *  60  ;          std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;  duration     (  in     periods  )  :     &  quot  ;;      std  ::  cout     &  lt  ;  &  lt  ;     mil  .  count  ()     &  lt  ;  &  lt  ;     &  quot  ;     milliseconds  .    n  &  quot  ;;          std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;  duration     (  in     seconds  )  :     &  quot  ;;      std  ::  cout     &  lt  ;  &  lt  ;     (  mil  .  count  ()     *     milliseconds  ::  period  ::  num     /         milliseconds  ::  period  ::  den  );      std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;     seconds  .    n  &  quot  ;;      return     0  ;   }   

Produksjon:

duration (in periods): 60000 milliseconds. duration (in seconds): 60 seconds. 

Klokke

En klokke består av et startpunkt (eller epoke) og en tikkfrekvens. For eksempel kan en klokke ha en epoke på 22. februar 1996 og tikke hvert sekund. C++ definerer tre klokketyper:

    systemklokke -Det er gjeldende klokkeslett i henhold til systemet (vanlig klokke som vi ser på verktøylinjen på datamaskinen). Den er skrevet som std::chrono::systemklokke steady_clock -Det er en monoton klokke som aldri vil bli justert. Den går med jevn hastighet. Den er skrevet som std::chrono::steady_clock høy_oppløsningsklokke – Det gir minst mulig avkryssingsperiode. Den er skrevet som-std::chrono::high_resolution_clock

Tidspunkt

Et time_point-objekt uttrykker et tidspunkt i forhold til en klokkes epoke. Internt lagrer objektet et objekt av en varighetstype og bruker klokketypen som referanse for sin epoke.  

CPP
   // C++ program to illustrate time point   // and system clock functions   #include      #include     #include     // Function to calculate   // Fibonacci series   long     fibonacci  (  unsigned     n  )   {      if     (  n     &  lt  ;     2  )     return     n  ;      return     fibonacci  (  n  -1  )     +     fibonacci  (  n  -2  );   }   int     main  ()   {      // Using time point and system_clock      std  ::  chrono  ::  time_point  &  lt  ;  std  ::  chrono  ::  system_clock  &  gt  ;     start       end  ;      start     =     std  ::  chrono  ::  system_clock  ::  now  ();      std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;  f  (  42  )     =     &  quot  ;     &  lt  ;  &  lt  ;     fibonacci  (  42  )     &  lt  ;  &  lt  ;     'n'  ;      end     =     std  ::  chrono  ::  system_clock  ::  now  ();      std  ::  chrono  ::  duration  &  lt  ;  double  &  gt  ;     elapsed_seconds     =     end     -     start  ;      std  ::  time_t     end_time     =     std  ::  chrono  ::  system_clock  ::  to_time_t  (  end  );      std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;  finished     computation     at     &  quot  ;     &  lt  ;  &  lt  ;     std  ::  ctime  (  &  amp  ;  end_time  )      &  lt  ;  &  lt  ;     &  quot  ;  elapsed     time  :     &  quot  ;     &  lt  ;  &  lt  ;     elapsed_seconds  .  count  ()     &  lt  ;  &  lt  ;     &  quot  ;  s    n  &  quot  ;;   }   

Produksjon:

f(42) = 267914296 finished computation at Wed Jan 4 05:13:48 2017 elapsed time: 2.14538s 

Det er viktig å merke seg at presisjonen og nøyaktigheten til klokkene og varighetene levert av kan variere avhengig av system og plattform, og det er alltid en god idé å sjekke dokumentasjonen til plattformen din for mer informasjon.

Lag quiz