C++ Academy · leksjon

Tidspunkter

Representer tidspunkter

Leksjon 2 av 413 trinn

Tidspunkter er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 2 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.

Hva er et tidspunkt?

Et std::chrono::time_point representerer et bestemt tidspunkt målt fra en klokkes epoke. Det kombinerer en klokke med en varighet siden denne epoken.

  • Returneres av clock::now().
  • Hvis Du trekker to tidspunkter fra hverandre, får Du en varighet.
#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    time_point<steady_clock> tp = steady_clock::now();
    std::cout << "Captured a moment: " << (tp.time_since_epoch().count() != 0) << '\n';
    return 0;
}

time_since_epoch

Alle tidspunkter kan oppgi avstanden fra klokkeepoken med time_since_epoch(), som returnerer en varighet.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto tp = system_clock::now();
    auto d = tp.time_since_epoch();
    auto s = duration_cast<seconds>(d);
    std::cout << "Positive epoch seconds: " << (s.count() > 0) << '\n';
    return 0;
}

Trekke fra tidspunkter

Hvis Du trekker ett tidspunkt fra et annet, får Du en varighet – den forløpte tiden mellom de to tidspunktene.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto a = steady_clock::now();
    auto b = steady_clock::now();
    auto diff = b - a;
    std::cout << "Elapsed ns is non-negative: " << (diff.count() >= 0) << '\n';
    return 0;
}

Legge til en varighet

Når Du legger en varighet til et tidspunkt, får Du et nytt tidspunkt i fremtiden (eller i fortiden ved subtraksjon). Slik beregner Du tidsfrister.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    using namespace std::chrono_literals;
    auto now = steady_clock::now();
    auto deadline = now + 10s;
    std::cout << "Deadline is after now: " << std::boolalpha << (deadline > now) << '\n';
    return 0;
}

Sammenligne tidspunkter

Tidspunkter fra samme klokke støtter alle sammenligningsoperatorer, slik at Du kan kontrollere om ett tidspunkt er før eller etter et annet.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto first = steady_clock::now();
    auto second = steady_clock::now();
    std::cout << std::boolalpha << (first <= second) << '\n';
    return 0;
}

Klokkespesifikke tidspunkter

Et tidspunkt er knyttet til klokketypen sin. Du kan ikke sammenligne et tidspunkt fra system_clock direkte med et fra steady_clock, fordi epokene deres er forskjellige.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    system_clock::time_point sys = system_clock::now();
    steady_clock::time_point mono = steady_clock::now();
    std::cout << "Both captured: " << ((sys.time_since_epoch().count() != 0) && (mono.time_since_epoch().count() != 0)) << '\n';
    return 0;
}

Konvertere til time_t

system_clock::to_time_t gjør et kalendertidspunkt om til en C-stil-time_t som Du kan formatere for visning for mennesker.

#include <iostream>
#include <chrono>
#include <ctime>

int main() {
    using namespace std::chrono;
    auto tp = system_clock::now();
    std::time_t t = system_clock::to_time_t(tp);
    std::cout << "time_t is positive: " << (t > 0) << '\n';
    return 0;
}

from_time_t

Det omvendte, system_clock::from_time_t, bygger et tidspunkt fra en time_t-verdi, for eksempel et lagret tidsstempel.

#include <iostream>
#include <chrono>
#include <ctime>

int main() {
    using namespace std::chrono;
    std::time_t t = 1000000000;
    auto tp = system_clock::from_time_t(t);
    auto back = system_clock::to_time_t(tp);
    std::cout << "Round trip ok: " << std::boolalpha << (back == t) << '\n';
    return 0;
}

Beregne en tidsfrist

Et vanlig mønster er å hente now(), legge til en tidsavbruddsvarighet og senere sammenligne med et nytt kall til now() for å se om tidsfristen er utløpt.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    using namespace std::chrono_literals;
    auto deadline = steady_clock::now() + 0ms;
    auto current = steady_clock::now();
    bool expired = current >= deadline;
    std::cout << "Expired: " << std::boolalpha << expired << '\n';
    return 0;
}

Presisjon for tidspunkter

Presisjonen til et tidspunkt samsvarer med varighetstypen til klokken. Du kan konvertere et tidspunkt til en grovere enhet ved hjelp av time_point_cast.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto tp = system_clock::now();
    auto secs_tp = time_point_cast<seconds>(tp);
    std::cout << "Cast preserved sign: " << (secs_tp.time_since_epoch().count() > 0) << '\n';
    return 0;
}

Lagre tidsstempler

For å lagre et tidspunkt konverterer Du det til et antall sekunder siden epoken, lagrer heltallet og bygger tidspunktet opp igjen senere ved behov.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto tp = system_clock::now();
    long long stored = duration_cast<seconds>(tp.time_since_epoch()).count();
    std::cout << "Stored value usable: " << (stored > 0) << '\n';
    return 0;
}

Kunnskapssjekk

Test forståelsen Din av aritmetikk med tidspunkter.

Oppsummering

Du har lært at et time_point:

  • markerer et bestemt tidspunkt i forhold til en klokkes epoke
  • oppgir forskyvningen sin via time_since_epoch()
  • støtter addisjon og subtraksjon av varigheter samt sammenligninger
  • konverteres til og fra time_t for visning og lagring

Deretter skal Du bruke disse verktøyene til å måle og sammenligne ytelsen til kode.

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 «Tidspunkter» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Tidspunkter», 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 «Tidspunkter»?

Representer tidspunkter 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 2 av 4.

Hvor lang tid tar leksjonen «Tidspunkter»?

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