จุดเวลา
แทนช่วงเวลาต่าง ๆ
จุดเวลา เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
จุดเวลาคืออะไร
std::chrono::time_point แทนช่วงเวลาที่เฉพาะเจาะจงซึ่งวัดจากจุดเริ่มต้นของนาฬิกา โดยจับคู่นาฬิกาเข้ากับช่วงเวลาที่ผ่านไปนับจากจุดเริ่มต้นนั้น
- ได้ค่ากลับมาจาก
clock::now() - การลบจุดเวลาสองจุดจะได้ช่วงเวลา
#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
จุดเวลาทุกจุดสามารถรายงานระยะห่างจากจุดเริ่มต้นของนาฬิกาได้ด้วย time_since_epoch() ซึ่งคืนค่าเป็นช่วงเวลา
#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;
}การลบจุดเวลา
การลบจุดเวลาหนึ่งออกจากอีกจุดหนึ่งจะได้ช่วงเวลา ซึ่งเป็นเวลาที่ผ่านไประหว่างช่วงเวลาทั้งสอง
#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;
}การบวกช่วงเวลา
การบวกช่วงเวลาเข้ากับจุดเวลาจะสร้างจุดเวลาใหม่ในอนาคต หรือในอดีตหากใช้การลบ วิธีนี้ใช้คำนวณกำหนดเวลาได้
#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;
}การเปรียบเทียบจุดเวลา
จุดเวลาจากนาฬิกาเดียวกันรองรับตัวดำเนินการเปรียบเทียบทั้งหมด ทำให้คุณตรวจสอบได้ว่าช่วงเวลาหนึ่งอยู่ก่อนหรือหลังอีกช่วงเวลาหนึ่ง
#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;
}จุดเวลาที่ขึ้นกับนาฬิกา
จุดเวลาจะผูกกับชนิดข้อมูลของนาฬิกา คุณไม่สามารถเปรียบเทียบจุดเวลาจาก system_clock กับจุดเวลาจาก steady_clock ได้โดยตรง เพราะจุดเริ่มต้นของนาฬิกาทั้งสองต่างกัน
#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;
}การแปลงเป็นชนิดเวลา
system_clock::to_time_t แปลงจุดเวลาตามปฏิทินให้เป็น time_t แบบภาษาซี ซึ่งคุณสามารถจัดรูปแบบเพื่อแสดงผลให้มนุษย์อ่านได้
#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
ในทางกลับกัน system_clock::from_time_t จะสร้างจุดเวลาจากค่า time_t เช่น การประทับเวลาที่บันทึกไว้
#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;
}การคำนวณกำหนดเวลา
รูปแบบที่ใช้กันทั่วไปคือ บันทึกค่า now() บวกช่วงเวลาหมดเวลา แล้วเปรียบเทียบกับค่า now() ใหม่ในภายหลัง เพื่อตรวจสอบว่าพ้นกำหนดเวลาแล้วหรือไม่
#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;
}ความละเอียดของจุดเวลา
ความละเอียดของจุดเวลาจะตรงกับชนิดช่วงเวลาของนาฬิกา คุณสามารถแปลงจุดเวลาเป็นหน่วยที่หยาบกว่าด้วย time_point_cast ได้
#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;
}การจัดเก็บการประทับเวลา
หากต้องการเก็บช่วงเวลาหนึ่งไว้ ให้แปลงเป็นจำนวนวินาทีนับจากจุดเริ่มต้น เก็บค่าจำนวนเต็มนั้น แล้วสร้างจุดเวลากลับคืนมาเมื่อต้องการใช้
#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;
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับการคำนวณจุดเวลา
สรุปทบทวน
คุณได้เรียนรู้ว่า time_point ทำสิ่งต่อไปนี้ได้
- ระบุช่วงเวลาที่เฉพาะเจาะจงเมื่อเทียบกับจุดเริ่มต้นของนาฬิกา
- รายงานระยะเยื้องจากจุดเริ่มต้นผ่าน
time_since_epoch() - รองรับการบวกและลบช่วงเวลา รวมถึงการเปรียบเทียบ
- แปลงเป็นและแปลงกลับจาก
time_tเพื่อแสดงผลและจัดเก็บ
ถัดไป คุณจะใช้เครื่องมือเหล่านี้เพื่อวัดประสิทธิภาพและเปรียบเทียบเวลาการทำงานของโค้ด
คำถามที่พบบ่อย
บทเรียน “จุดเวลา” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “จุดเวลา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “จุดเวลา”
แทนช่วงเวลาต่าง ๆ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “จุดเวลา” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ