0Pricing
C++ Academy · บทเรียน

ช่วงเวลาและนาฬิกา

วัดช่วงเวลา

ช่วงเวลาและนาฬิกา เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงใช้ <chrono>

ไลบรารี <chrono> ทำให้ C++ มีวิธีจัดการกับเวลาแบบปลอดภัยด้านชนิดข้อมูล แทนที่จะใช้จำนวนเต็มทั่วไป คุณจะใช้ช่วงเวลาและจุดเวลาแบบมีชนิดข้อมูลชัดเจน ทำให้คอมไพเลอร์ตรวจพบข้อผิดพลาดเรื่องหน่วยได้

  • ไม่ต้องสับสนระหว่างวินาทีกับมิลลิวินาทีอีกต่อไป
  • หน่วยต่าง ๆ เป็นส่วนหนึ่งของระบบชนิดข้อมูล
#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    seconds s{5};
    std::cout << "Duration: " << s.count() << " seconds\n";
    return 0;
}

ช่วงเวลาคืออะไร

std::chrono::duration แทนช่วงของเวลา โดยเก็บจำนวนขีดเวลา พร้อมอัตราส่วนที่อธิบายคาบของขีดเวลา มีชื่อแทนที่กำหนดไว้ล่วงหน้าสำหรับหน่วยที่ใช้กันทั่วไป

  • hours, minutes, seconds
  • milliseconds, microseconds, nanoseconds
#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    milliseconds ms{1500};
    std::cout << ms.count() << " ms\n";
    return 0;
}

ค่าคงที่ของช่วงเวลา

เนมสเปซ std::chrono_literals ช่วยให้คุณเขียนช่วงเวลาด้วยส่วนต่อท้าย เช่น 5s หรือ 200ms ทำให้โค้ดอ่านได้เหมือนภาษาธรรมดา

#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;
}

การแปลงช่วงเวลา

duration_cast ใช้แปลงระหว่างหน่วย การแปลงจากหน่วยที่ละเอียดกว่าไปเป็นหน่วยที่หยาบกว่าจะตัดเศษทิ้ง ดังนั้น 1500 มิลลิวินาทีจึงกลายเป็น 1 วินาที

#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;
}

การคำนวณกับช่วงเวลา

ช่วงเวลารองรับ +, -, * และ / เมื่อผสมหน่วยต่างกัน ระบบจะเลื่อนชนิดข้อมูลไปใช้หน่วยร่วมที่ละเอียดกว่าโดยอัตโนมัติ

#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;
}

ช่วงเวลาแบบจุดลอยตัว

คุณสามารถใช้การแทนค่าแบบจุดลอยตัวเพื่อคงค่าเศษส่วนไว้ขณะแปลงหน่วย และหลีกเลี่ยงการตัดเศษของช่วงเวลาแบบจำนวนเต็ม

#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;
}

นาฬิกาคืออะไร

นาฬิกาใช้ระบุเวลาปัจจุบัน ไลบรารีมาตรฐานมีนาฬิกาให้เลือกสามชนิด

  • system_clock — เวลาตามนาฬิกาจริง
  • steady_clock — เวลาไม่ย้อนกลับ เหมาะสำหรับการจับเวลา
  • high_resolution_clock — ขีดเวลาที่ละเอียดที่สุดเท่าที่มี
#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 ติดตามเวลาปฏิทินจริง และสามารถแปลงเป็น time_t เพื่อแสดงผลได้ นาฬิกานี้อาจกระโดดไปข้างหน้าหรือข้างหลังหากมีการปรับนาฬิกาของระบบ

#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 มีคุณสมบัติเพิ่มขึ้นอย่างเดียว โดยเดินไปข้างหน้าด้วยอัตราคงที่ ใช้นาฬิกานี้ทุกครั้งที่วัดเวลาที่ผ่านไป และอย่าใช้ system_clock

#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;
}

ความละเอียดของนาฬิกา

นาฬิกาแต่ละชนิดเปิดเผยค่า period เป็นอัตราส่วนที่คำนวณในเวลาคอมไพล์ คุณสามารถตรวจสอบในเวลาคอมไพล์ได้เช่นกันว่านาฬิกาเดินอย่างคงที่หรือไม่

#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;
}

การนำทุกอย่างมาประกอบกัน

นำนาฬิกาและช่วงเวลามาใช้ร่วมกัน โดยอ่านจุดเวลาสองจุดแล้วคำนวณผลต่างเป็นช่วงเวลาในหน่วยที่คุณเลือก

#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;
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับการเลือกนาฬิกาสำหรับจับเวลา

สรุปทบทวน

คุณได้เรียนรู้ว่า <chrono> มีสิ่งต่อไปนี้

  • ช่วงเวลา — ช่วงเวลาที่ปลอดภัยด้านชนิดข้อมูล พร้อมค่าคงที่อย่าง 5s
  • duration_cast สำหรับแปลงหน่วย ซึ่งจะตัดเศษของจำนวนเต็มทิ้ง
  • นาฬิกา — system_clock, steady_clock, high_resolution_clock
  • ใช้ steady_clock เพื่อวัดช่วงเวลา

ถัดไป คุณจะได้แทนช่วงเวลาที่เฉพาะเจาะจงด้วยจุดเวลา

คำถามที่พบบ่อย

บทเรียน “ช่วงเวลาและนาฬิกา” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ช่วงเวลาและนาฬิกา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ช่วงเวลาและนาฬิกา”

วัดช่วงเวลา คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ช่วงเวลาและนาฬิกา” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ช่วงเวลาและนาฬิกา
  2. จุดเวลา
  3. การวัดประสิทธิภาพโค้ด
  4. ปฏิทินและเขตเวลา
← กลับไปที่ C++ Academy