C++ Academy · leksjon

Varigheter og klokker

Mål tidsintervaller

Leksjon 1 av 413 trinn

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, seconds
  • milliseconds, 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 — klokketid
  • steady_clock — går aldri bakover og er ideell for tidsmåling
  • high_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_cast for konvertering mellom enheter (heltall avkortes)
  • klokker — system_clock, steady_clock, high_resolution_clock
  • bruk steady_clock til å måle intervaller

Deretter skal Du representere bestemte tidspunkter med tidspunkter.

Gratis å komme i gang

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

  1. Varigheter og klokker
  2. Tidspunkter
  3. Måle kodeytelse
  4. Kalender og tidssoner
← Tilbake til C++ Academy