Tidspunkter
Representer tidspunkter
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_tfor visning og lagring
Deretter skal Du bruke disse verktøyene til å måle og sammenligne ytelsen til kode.
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.