จาก N3376:
20.11.7.1 [time.clock.system] / 1:
วัตถุของคลาสsystem_clock
แสดงเวลานาฬิกาแขวนจากนาฬิกาเรียลไทม์ทั้งระบบ
20.11.7.2 [time.clock.steady] / 1:
ออบเจ็กต์ของคลาสsteady_clock
แสดงถึงนาฬิกาที่ค่าtime_point
ไม่เคยลดลงเมื่อเวลาทางกายภาพก้าวหน้าขึ้นและค่าใดtime_point
ล่วงหน้าในอัตราคงที่เมื่อเทียบกับเวลาจริง นั่นคืออาจไม่มีการปรับนาฬิกา
20.11.7.3 [time.clock.hires] / 1:
ออบเจ็กต์ของคลาสhigh_resolution_clock
เป็นตัวแทนของนาฬิกาที่มีช่วงเวลาขีดสั้นที่สุด high_resolution_clock
อาจจะเป็นคำพ้องหาหรือsystem_clock
steady_clock
ตัวอย่างเช่นนาฬิกากว้างของระบบอาจได้รับผลกระทบจากบางอย่างเช่นเวลาออมแสงซึ่งเวลาจริงที่ระบุไว้ในอนาคตอาจเป็นเวลาในอดีตก็ได้ (เช่นในสหรัฐอเมริกาในเวลาฤดูใบไม้ร่วงจะเลื่อนกลับไปหนึ่งชั่วโมงดังนั้นชั่วโมงเดียวกันจึงมีประสบการณ์ "สองครั้ง") อย่างไรก็ตามsteady_clock
ไม่อนุญาตให้ได้รับผลกระทบจากสิ่งดังกล่าว
อีกวิธีหนึ่งในการคิดเกี่ยวกับ "คงที่" ในกรณีนี้อยู่ในข้อกำหนดที่กำหนดไว้ในตาราง 20.11.3 [time.clock.req] / 2:
ในตารางที่ 59 C1
และC2
แสดงประเภทนาฬิกา t1
และt2
จะมีค่าส่งกลับโดยC1::now()
ที่โทรกลับมาt1
เกิดขึ้นก่อนที่จะเรียกกลับมาและทั้งสองของสายเหล่านี้เกิดขึ้นก่อนt2
C1::time_point::max()
[หมายเหตุ: วิธีนี้C1
ไม่ได้ล้อมรอบระหว่างt1
และt2
และ- ส่งหมายเหตุ]
นิพจน์: C1::is_steady
การส่งคืน: const bool
ความหมายในการดำเนินงาน: true
ถ้าเป็นจริงเสมอและเวลาระหว่างนาฬิกาเห็บเป็นค่าคงที่มิฉะนั้นt1 <= t2
false
นั่นคือมาตรฐานทั้งหมดที่มีต่อความแตกต่าง
หากคุณต้องการทำการเปรียบเทียบทางออกที่ดีที่สุดของคุณน่าจะเป็นstd::high_resolution_clock
เพราะเป็นไปได้ว่าแพลตฟอร์มของคุณใช้ตัวจับเวลาความละเอียดสูง (เช่นQueryPerformanceCounter
บน Windows) สำหรับนาฬิกานี้ อย่างไรก็ตามหากคุณกำลังเปรียบเทียบคุณควรพิจารณาใช้ตัวจับเวลาเฉพาะแพลตฟอร์มสำหรับการเปรียบเทียบของคุณเนื่องจากแพลตฟอร์มต่างๆจัดการสิ่งนี้แตกต่างกัน ตัวอย่างเช่นบางแพลตฟอร์มอาจให้วิธีการบางอย่างในการกำหนดจำนวนนาฬิกาจริงที่โปรแกรมต้องการ (เป็นอิสระจากกระบวนการอื่น ๆ ที่ทำงานบน CPU เดียวกัน) ยังดีกว่าให้รับมือกับผู้สร้างโปรไฟล์จริงและใช้สิ่งนั้น