Từ N3376:
20.11.7.1 [time.clock.system] / 1:
Các đối tượng của lớp system_clock
biểu thị thời gian đồng hồ treo tường từ đồng hồ thời gian thực trên toàn hệ thống.
20.11.7.2 [time.clock.steady] / 1:
Các đối tượng của lớp steady_clock
đại diện cho đồng hồ mà giá trị time_point
không bao giờ giảm khi thời gian vật lý tăng lên và giá trị nào củatime_point
tăng trước với tốc độ ổn định so với thời gian thực. Có nghĩa là, đồng hồ có thể không được điều chỉnh.
20.11.7.3 [time.clock.hires] / 1:
Các đối tượng của lớp high_resolution_clock
đại diện cho đồng hồ có chu kỳ tích tắc ngắn nhất. high_resolution_clock
có thể là một từ đồng nghĩa với system_clock
hoặc steady_clock
.
Ví dụ: đồng hồ toàn hệ thống có thể bị ảnh hưởng bởi một số thứ như thời gian tiết kiệm ánh sáng ban ngày, tại thời điểm này, thời gian thực tế được liệt kê tại một số thời điểm trong tương lai thực sự có thể là một thời điểm trong quá khứ. (Ví dụ: ở Hoa Kỳ, vào mùa thu, thời gian lùi lại một giờ, do đó, cùng một giờ được trải qua "hai lần") Tuy nhiên,steady_clock
không được phép bị ảnh hưởng bởi những điều như vậy.
Một cách khác để nghĩ về "ổn định" trong trường hợp này là các yêu cầu được xác định trong bảng 20.11.3 [time.clock.req] / 2:
Trong Bảng 59 C1
và C2
biểu thị các loại đồng hồ. t1
và t2
là các giá trị được trả về bởi C1::now()
nơi mà cuộc gọi trả về t1
xảy ra trước khi cuộc gọi quay lại t2
và cả hai cuộc gọi này đều xảy ra trước đó C1::time_point::max()
. [Lưu ý: điều này có nghĩa là C1
không quấn quanh giữa t1
vàt2
. —Gửi ghi chú]
Biểu thức: C1::is_steady
Trả về: const bool
Ngữ nghĩa hoạt động: true
nếu t1 <= t2
luôn đúng và thời gian giữa các lần tích tắc đồng hồ là không đổi, ngược lại false
.
Đó là tất cả những gì tiêu chuẩn có về sự khác biệt của chúng.
Nếu bạn muốn thực hiện đo điểm chuẩn, cách tốt nhất của bạn có lẽ sẽ là std::high_resolution_clock
vì có khả năng nền tảng của bạn sử dụng bộ đếm thời gian có độ phân giải cao (ví dụ QueryPerformanceCounter
trên Windows) cho đồng hồ này. Tuy nhiên, nếu bạn đang đo điểm chuẩn, bạn thực sự nên cân nhắc sử dụng bộ tính giờ dành riêng cho nền tảng cho điểm chuẩn của mình, vì các nền tảng khác nhau xử lý điều này khác nhau. Ví dụ: một số nền tảng có thể cung cấp cho bạn một số phương tiện để xác định số xung nhịp thực tế mà chương trình yêu cầu (độc lập với các quy trình khác chạy trên cùng một CPU). Tốt hơn, hãy chạm tay vào một hồ sơ cá nhân thực sự và sử dụng nó.