ช่วงเวลาและนาฬิกา
วัดช่วงเวลา
ช่วงเวลาและนาฬิกา เป็นบทเรียน 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,secondsmilliseconds,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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ช่วงเวลาและนาฬิกา
- จุดเวลา
- การวัดประสิทธิภาพโค้ด
- ปฏิทินและเขตเวลา