C++ Academy · Oppitunti

Aikapisteet

Esitä ajanhetkiä

Oppitunti 2/413 vaihetta

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.

Aloita maksutta

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.

Kaikki tämän kurssin oppitunnit

  1. Kestot ja kellot
  2. Aikapisteet
  3. Koodin suorituskyvyn mittaaminen
  4. Kalenteri ja aikavyöhykkeet
← Takaisin: C++ Academy