Kestot ja kellot
Mittaa aikavälejä
Kestot ja kellot on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.
Miksi <chrono>?
<chrono>-kirjasto tarjoaa C++:lle tyyppiturvallisen tavan käsitellä aikaa. Raakojen kokonaislukujen sijaan käytätte vahvasti tyypitettyjä kestoja ja ajanhetkiä, jolloin kääntäjä havaitsee yksiköihin liittyvät virheet.
- Sekunnit ja millisekunnit eivät enää mene sekaisin.
- Yksiköt ovat osa tyyppijärjestelmää.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
seconds s{5};
std::cout << "Duration: " << s.count() << " seconds\n";
return 0;
}Mikä on kesto?
std::chrono::duration esittää ajanjaksoa. Se tallentaa tikkojen lukumäärän sekä tikin jaksoa kuvaavan suhteen. Ennalta määritetyt aliakset kattavat yleiset yksiköt.
hours,minutes,secondsmilliseconds,microseconds,nanoseconds
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
milliseconds ms{1500};
std::cout << ms.count() << " ms\n";
return 0;
}Kestoliteraalit
std::chrono_literals-nimiavaruuden avulla voitte kirjoittaa kestoja jälkiliitteillä, kuten 5s tai 200ms, jolloin koodi muistuttaa tavallista tekstiä.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono_literals;
auto wait = 3s;
auto blink = 250ms;
std::cout << wait.count() << "s, " << blink.count() << "ms\n";
return 0;
}Kestojen muuntaminen
duration_cast muuntaa yksiköstä toiseen. Muunnettaessa tarkemmasta yksiköstä karkeampaan tulos katkaistaan, joten 1500 ms muuttuu arvoksi 1 s.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
milliseconds ms{1500};
seconds s = duration_cast<seconds>(ms);
std::cout << s.count() << " whole seconds\n";
return 0;
}Kestoilla tehtävät laskutoimitukset
Kestot tukevat operaattoreita +, -, * ja /. Eri yksiköitä yhdistettäessä käytetään automaattisesti tarkempaa yhteistä yksikköä.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto total = minutes{2} + seconds{30};
std::cout << total.count() << " seconds total\n";
return 0;
}Liukulukukestot
Voitte käyttää liukulukuesitystä säilyttääksenne murto-osat muunnoksen aikana ja välttääksenne kokonaislukukestojen katkaisun.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
milliseconds ms{1500};
duration<double> secs = ms;
std::cout << secs.count() << " seconds\n";
return 0;
}Mikä on kello?
Kello tarjoaa nykyisen ajan. Standardikirjasto sisältää kolme kelloa:
system_clock— järjestelmän kellonaikasteady_clock— ei kulje koskaan taaksepäin, joten se sopii ajoitukseenhigh_resolution_clock— pienin käytettävissä oleva tikki
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto now = steady_clock::now();
std::cout << "Got a time point: " << (now.time_since_epoch().count() > 0) << '\n';
return 0;
}system_clock
system_clock seuraa reaalimaailman kalenteriaikaa, ja se voidaan muuntaa näyttämistä varten muotoon time_t. Aika saattaa hypätä, jos järjestelmän kelloa säädetään.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto tp = system_clock::now();
auto secs = duration_cast<seconds>(tp.time_since_epoch());
std::cout << "Seconds since epoch is positive: " << (secs.count() > 0) << '\n';
return 0;
}steady_clock
steady_clock on monotoninen: se kulkee vain eteenpäin vakionopeudella. Käyttäkää sitä aina kuluneen ajan mittaamiseen, älkää koskaan system_clock-kelloa.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto a = steady_clock::now();
auto b = steady_clock::now();
std::cout << "Monotonic: " << std::boolalpha << (b >= a) << '\n';
return 0;
}Kellon resoluutio
Jokainen kello tarjoaa period-jäsenensä käännösaikaisena suhteena. Voitte tarkistaa käännösaikana myös, onko kello vakaa.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
std::cout << "steady_clock is_steady: " << std::boolalpha << steady_clock::is_steady << '\n';
std::cout << "system_clock is_steady: " << system_clock::is_steady << '\n';
return 0;
}Osien yhdistäminen
Yhdistäkää kellot ja kestot: lukekaa kaksi ajanhetkeä ja laskekaa niiden ero valitsemassanne yksikössä esitettynä kestona.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
long sum = 0;
for (int i = 0; i < 1000000; ++i) sum += i;
auto end = steady_clock::now();
auto us = duration_cast<microseconds>(end - start);
std::cout << "Loop took at least 0 us: " << (us.count() >= 0) << '\n';
return 0;
}Pikatarkistus
Testatkaa ymmärrystänne siitä, mitä kelloa ajoituksen mittaamiseen kannattaa käyttää.
Kertaus
Opitte, että <chrono> tarjoaa:
- kestoja — tyyppiturvallisia ajanjaksoja, joissa voidaan käyttää literaaleja, kuten
5s duration_cast-funktion yksiköiden muuntamiseen (kokonaisluvut katkaistaan)- kelloja —
system_clock,steady_clock,high_resolution_clock - käyttäkää
steady_clock-kelloa aikavälien mittaamiseen
Seuraavaksi esitätte tietyt ajanhetket aikapisteinä.
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 ”Kestot ja kellot” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Kestot ja kellot”. 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 ”Kestot ja kellot”?
Mittaa aikavälejä 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 1/4.
Kuinka kauan ”Kestot ja kellot”-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.