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
| Elemento | Descrizione |
|---|---|
| duration | Intervallo di tempo (es: 5 secondi) |
| time_point | Punto nel tempo (es: ora attuale) |
| clock | Orologio per ottenere il tempo |
3️⃣ Le principali unità di tempo
| Unità | Tipo | Esempio |
|---|---|---|
| secondi | seconds | seconds(5) |
| millisecondi | milliseconds | milliseconds(100) |
| microsecondi | microseconds | microseconds(250) |
| nanosecondi | nanoseconds | nanoseconds(50) |
| minuti | minutes | minutes(3) |
| ore | hours | hours(1) |
4️⃣ Orologi disponibili
| Clock | Descrizione |
|---|---|
system_clock | Orario di sistema (modificabile dall utente) |
steady_clock | Monotono, ideale per misurazioni |
high_resolution_clock | Il 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.
Strumenti:
- Libreria
<chrono> - Clock: steady_clock, high_resolution_clock
- duration e duration_cast
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.