Aikapisteet
Esitä ajanhetkiä
Aikapisteet on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on aikapiste?
std::chrono::time_point esittää kellon epookista mitattua tiettyä ajanhetkeä. Se yhdistää kellon ja epookista kuluneen keston.
- Sen palauttaa
clock::now(). - Kahden aikapisteen vähentäminen tuottaa keston.
#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
Jokainen aikapiste voi ilmoittaa etäisyytensä kellon epookista funktion time_since_epoch() avulla. Funktio palauttaa keston.
#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;
}Aikapisteiden vähentäminen
Yhden aikapisteen vähentäminen toisesta tuottaa keston, joka kertoo ajanhetkien välillä kuluneen ajan.
#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;
}Keston lisääminen
Keston lisääminen aikapisteeseen tuottaa uuden aikapisteen tulevaisuudessa (vähentäminen puolestaan menneisyydessä). Näin lasketaan määräaikoja.
#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;
}Aikapisteiden vertaileminen
Saman kellon aikapisteet tukevat kaikkia vertailuoperaattoreita, joten voitte tarkistaa, onko toinen ajanhetki ennen toista vai sen jälkeen.
#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;
}Kellokohtaiset aikapisteet
Aikapiste on sidottu kellonsa tyyppiin. Ette voi verrata suoraan system_clock-kellon aikapistettä steady_clock-kellon aikapisteeseen, koska niiden epookit ovat erilaiset.
#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;
}Muuntaminen time_t-muotoon
system_clock::to_time_t muuntaa kalenteriajan aikapisteen C-tyyliseksi time_t-arvoksi, jonka voitte muotoilla ihmisille näytettäväksi.
#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
Käänteinen toiminto system_clock::from_time_t muodostaa aikapisteen time_t-arvosta, kuten tallennetusta aikaleimasta.
#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;
}Määräajan laskeminen
Yleinen toimintamalli on tallentaa now()-arvo, lisätä siihen aikakatkaisun kesto ja verrata sitä myöhemmin uuteen now()-arvoon sen tarkistamiseksi, onko määräaika ohitettu.
#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;
}Aikapisteen tarkkuus
Aikapisteen tarkkuus vastaa sen kellon kestotyyppiä. Voitte muuntaa aikapisteen karkeampaan yksikköön käyttämällä time_point_cast-funktiota.
#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;
}Aikaleimojen tallentaminen
Tallentakaa ajanhetki muuntamalla se epookista kuluneiden sekuntien määräksi, tallentamalla kokonaisluku ja muodostamalla aikapiste myöhemmin uudelleen tarvittaessa.
#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;
}Pikatarkistus
Testatkaa ymmärrystänne aikapisteillä tehtävistä laskutoimituksista.
Kertaus
Opitte, että time_point:
- merkitsee tiettyä ajanhetkeä suhteessa kellon epookkiin
- ilmoittaa siirtymänsä funktion
time_since_epoch()avulla - tukee kestojen lisäämistä ja vähentämistä sekä vertailuja
- muunnetaan
time_t-muotoon ja takaisin näyttämistä ja tallentamista varten
Seuraavaksi käytätte näitä työkaluja suorituskyvyn vertailemiseen ja koodin suorituskyvyn mittaamiseen.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Aikapisteet” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Aikapisteet”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Aikapisteet”?
Esitä ajanhetkiä Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Aikapisteet”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.