Varigheter og klokker
Mål tidsintervaller
Varigheter og klokker er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Hvorfor <chrono>?
Biblioteket <chrono> gir C++ en typesikker måte å arbeide med tid på. I stedet for rå heltall bruker Du sterkt typede varigheter og tidspunkter, slik at kompilatoren kan oppdage feil med enheter.
- Du trenger ikke lenger blande sammen sekunder og millisekunder.
- Enhetene er en del av typesystemet.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
seconds s{5};
std::cout << "Duration: " << s.count() << " seconds\n";
return 0;
}Hva er en varighet?
En std::chrono::duration representerer et tidsintervall. Den lagrer et antall ticks samt et forholdstall som beskriver tick-perioden. Forhåndsdefinerte alias dekker vanlige enheter.
hours,minutes,secondsmilliseconds,microseconds,nanoseconds
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
milliseconds ms{1500};
std::cout << ms.count() << " ms\n";
return 0;
}Varighetslitteraler
Navnerommet std::chrono_literals lar Deg skrive varigheter med suffikser som 5s eller 200ms, slik at koden leses mer som vanlig tekst.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono_literals;
auto wait = 3s;
auto blink = 250ms;
std::cout << wait.count() << "s, " << blink.count() << "ms\n";
return 0;
}Konvertere varigheter
duration_cast konverterer mellom enheter. Konvertering fra en finere enhet til en grovere avkorter verdien, slik at 1500 ms blir 1 s.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
milliseconds ms{1500};
seconds s = duration_cast<seconds>(ms);
std::cout << s.count() << " whole seconds\n";
return 0;
}Aritmetikk med varigheter
Varigheter støtter +, -, * og /. Når Du blander enheter, konverteres de automatisk til den fineste felles enheten.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto total = minutes{2} + seconds{30};
std::cout << total.count() << " seconds total\n";
return 0;
}Varigheter med flyttall
Du kan bruke en flyttallrepresentasjon for å beholde brøkverdier ved konvertering og unngå avkortingen som oppstår med heltallsvarigheter.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
milliseconds ms{1500};
duration<double> secs = ms;
std::cout << secs.count() << " seconds\n";
return 0;
}Hva er en klokke?
En klokke gir gjeldende tidspunkt. Standardbiblioteket tilbyr tre:
system_clock— klokketidsteady_clock— går aldri bakover og er ideell for tidsmålinghigh_resolution_clock— fineste tilgjengelige oppløsning
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto now = steady_clock::now();
std::cout << "Got a time point: " << (now.time_since_epoch().count() > 0) << '\n';
return 0;
}system_clock
system_clock følger reell kalendertid og kan konverteres til en time_t for visning. Den kan hoppe frem eller tilbake hvis systemklokken justeres.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto tp = system_clock::now();
auto secs = duration_cast<seconds>(tp.time_since_epoch());
std::cout << "Seconds since epoch is positive: " << (secs.count() > 0) << '\n';
return 0;
}steady_clock
steady_clock er monoton: den går bare fremover i jevn takt. Bruk den hver gang Du måler forløpt tid, aldri system_clock.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto a = steady_clock::now();
auto b = steady_clock::now();
std::cout << "Monotonic: " << std::boolalpha << (b >= a) << '\n';
return 0;
}Klokkeoppløsning
Hver klokke eksponerer sin period som et forholdstall kjent ved kompilering. Du kan også undersøke ved kompilering om en klokke er stabil.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
std::cout << "steady_clock is_steady: " << std::boolalpha << steady_clock::is_steady << '\n';
std::cout << "system_clock is_steady: " << system_clock::is_steady << '\n';
return 0;
}Sette det hele sammen
Kombiner klokker og varigheter: les av to tidspunkter og beregn forskjellen som en varighet i den valgte enheten.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
long sum = 0;
for (int i = 0; i < 1000000; ++i) sum += i;
auto end = steady_clock::now();
auto us = duration_cast<microseconds>(end - start);
std::cout << "Loop took at least 0 us: " << (us.count() >= 0) << '\n';
return 0;
}Kunnskapssjekk
Test forståelsen Din av hvilken klokke Du bør bruke til tidsmåling.
Oppsummering
Du har lært at <chrono> tilbyr:
- varigheter — typesikre tidsintervaller med litteraler som
5s duration_castfor konvertering mellom enheter (heltall avkortes)- klokker —
system_clock,steady_clock,high_resolution_clock - bruk
steady_clocktil å måle intervaller
Deretter skal Du representere bestemte tidspunkter med tidspunkter.
Lær deg C++ med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «Varigheter og klokker» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Varigheter og klokker», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Varigheter og klokker»?
Mål tidsintervaller Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med C++ Academy?
Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Varigheter og klokker»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?
Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Varigheter og klokker
- Tidspunkter
- Måle kodeytelse
- Kalender og tidssoner