Linguaggio C++

Libreria Chrono

Introduzione alla libreria chrono del C++: gestione del tempo, misurazione delle prestazioni, durate, clock e laboratorio guidato.

La libreria <chrono> fornisce strumenti per lavorare con il tempo:

  • durate (secondi, millisecondi, ore...)
  • punti nel tempo (timestamp)
  • orologi (system_clock, steady_clock, high_resolution_clock)

È ampiamente utilizzata per misurare il tempo di esecuzione, gestire timer e rappresentare istanti temporali.


1️⃣ Inclusione della libreria


#include <chrono>
using namespace std;
using namespace std::chrono;

2️⃣ Le tre componenti fondamentali

ElementoDescrizione
durationIntervallo di tempo (es: 5 secondi)
time_pointPunto nel tempo (es: ora attuale)
clockOrologio per ottenere il tempo

3️⃣ Le principali unità di tempo

UnitàTipoEsempio
secondisecondsseconds(5)
millisecondimillisecondsmilliseconds(100)
microsecondimicrosecondsmicroseconds(250)
nanosecondinanosecondsnanoseconds(50)
minutiminutesminutes(3)
orehourshours(1)

4️⃣ Orologi disponibili

ClockDescrizione
system_clockOrario di sistema (modificabile dall utente)
steady_clockMonotono, ideale per misurazioni
high_resolution_clockIl più preciso (alias di uno dei precedenti)

5️⃣ Misurare il tempo di esecuzione


auto start = high_resolution_clock::now();

// codice da misurare
for(int i=0; i<1000000; i++);

auto end = high_resolution_clock::now();

auto durata = duration_cast(end - start);

cout << "Tempo: " << durata.count() << " ms";

6️⃣ Usare duration


seconds s(5);
milliseconds ms = 2s; // C++14

cout << s.count();    // 5
cout << ms.count();   // 2000

7️⃣ Sommare e convertire durate


auto totale = seconds(2) + milliseconds(500); // 2.5 secondi

cout << duration_cast(totale).count(); // 2500

8️⃣ time_point: rappresentare l istante attuale


auto ora = system_clock::now();

Per trasformarlo in tempo leggibile:


time_t t = system_clock::to_time_t(ora);

cout << ctime(&t);

9️⃣ Esempio completo


auto start = steady_clock::now();

for(int i = 0; i < 100000; i++);

auto end = steady_clock::now();

cout << "ns = " 
     << duration_cast(end - start).count();
LABORATORIO

Uso della Libreria chrono

In questo laboratorio imparerai a misurare tempi di esecuzione, a rappresentare istanti temporali e a manipolare durate usando <chrono>. L obiettivo è comprendere quando usare i vari clock e come convertire correttamente le unità di tempo.


1 Misura un ciclo for

Misura quanto tempo impiega un ciclo for da 1 a 2 milioni.


auto start = high_resolution_clock::now();

for(int i=0; i<2000000; i++);

auto end = high_resolution_clock::now();

cout << duration_cast(end - start).count() << " ms";

2 Timer di 5 secondi

Crea un programma che attende 5 secondi usando sleep_for.


this_thread::sleep_for(seconds(5));
cout << "Tempo trascorso!";

3 Visualizza l ora attuale


auto now = system_clock::now();
time_t t = system_clock::to_time_t(now);

cout << "Ora: " << ctime(&t);

4 Confronto tra durate


seconds s(3);
milliseconds ms(2500);

if(ms < s)
    cout << "2.5s è minore di 3s";

5 Esercizi

  • Misura il tempo per ordinare un vector di 100.000 numeri.
  • Crea un cronometro che registra start/stop.
  • Simula un conto alla rovescia da 10 a 0.
  • Mostra la differenza in secondi tra due time_point.