Tidspunkter
Repræsentér tidspunkter
Tidspunkter er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad er et tidspunkt?
Et std::chrono::time_point repræsenterer et bestemt tidspunkt målt fra et urs epoke. Det knytter et ur sammen med en varighed siden denne epoke.
- Returneres af
clock::now(). - Subtraktion af to tidspunkter giver en varighed.
#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 angive deres afstand fra urets epoke med time_since_epoch(), som returnerer en varighed.
#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;
}Subtraktion af tidspunkter
Subtraktion af ét tidspunkt fra et andet giver en varighed, altså den forløbne tid mellem de to tidspunkter.
#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;
}Tilføjelse af en varighed
Hvis du lægger en varighed til et tidspunkt, får du et nyt tidspunkt i fremtiden eller i fortiden ved subtraktion. Sådan 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;
}Sammenligning af tidspunkter
Tidspunkter fra det samme ur understøtter alle sammenligningsoperatorer, så du kan kontrollere, om et tidspunkt ligger før eller efter et andet.
#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;
}Urspecifikke tidspunkter
Et tidspunkt er knyttet til typen af dets ur. Du kan ikke sammenligne et tidspunkt fra system_clock direkte med et fra steady_clock, fordi deres epoker er forskellige.
#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;
}Konvertering til time_t
system_clock::to_time_t omdanner et tidspunkt i kalendertiden til en C-lignende time_t, som du kan formatere til 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 gør system_clock::from_time_t, som opretter et tidspunkt ud fra en time_t-værdi, f.eks. et gemt 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;
}Beregning af en tidsfrist
Et almindeligt mønster er at gemme now(), tilføje en varighed for tidsudløbet og senere sammenligne med et nyt kald til now() for at se, om tidsfristen er overskredet.
#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;
}Tidspunktets præcision
Et tidspunkts præcision svarer til urets varighedstype. Du kan konvertere et tidspunkt til en grovere enhed med 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;
}Lagring af tidsstempler
Hvis du vil gemme et tidspunkt permanent, skal du konvertere det til et antal sekunder siden epoken, gemme heltallet og senere genskabe tidspunktet efter 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;
}Hurtig kontrol
Afprøv din forståelse af aritmetik på tidspunkter.
Opsummering
Du har lært, at et time_point:
- markerer et bestemt tidspunkt i forhold til et urs epoke
- angiver sin forskydning via
time_since_epoch() - understøtter addition og subtraktion af varigheder samt sammenligninger
- kan konverteres til og fra
time_ttil visning og lagring
Dernæst bruger du disse værktøjer til at måle og analysere kodens ydeevne.
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Tidspunkter” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Tidspunkter”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Tidspunkter”?
Repræsentér tidspunkter Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Tidspunkter”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.