Dari N3376:
20.11.7.1 [time.clock.system] / 1:
Objek kelas system_clock
mewakili waktu jam dinding dari jam waktu nyata di seluruh sistem.
20.11.7.2 [jam.stabil] / 1:
Objek kelas steady_clock
mewakili jam yang nilainya time_point
tidak pernah berkurang seiring waktu fisik berjalan dan nilai time_point
kemajuannya pada kecepatan tetap relatif terhadap waktu nyata. Artinya, jam mungkin tidak bisa disetel.
20.11.7.3 [time.clock.hires] / 1:
Objek kelas high_resolution_clock
mewakili jam dengan periode centang terpendek. high_resolution_clock
mungkin sinonim untuk system_clock
atau steady_clock
.
Misalnya, jam lebar sistem mungkin dipengaruhi oleh sesuatu seperti waktu musim panas, di mana waktu aktual yang tercantum di beberapa titik di masa mendatang sebenarnya bisa menjadi waktu di masa lalu. (Misalnya di AS, pada musim gugur waktu bergerak mundur satu jam, sehingga jam yang sama dialami "dua kali") Namun, steady_clock
tidak diperbolehkan untuk terpengaruh oleh hal-hal seperti itu.
Cara berpikir lain tentang "mantap" dalam hal ini adalah dalam persyaratan yang ditentukan dalam tabel 20.11.3 [time.clock.req] / 2:
Dalam Tabel 59 C1
dan C2
menunjukkan jenis jam. t1
dan t2
merupakan nilai yang dikembalikan oleh C1::now()
tempat panggilan balik t1
terjadi sebelum panggilan kembali t2
dan kedua panggilan ini terjadi sebelumnya C1::time_point::max()
. [Catatan: cara C1
ini tidak membungkus antara t1
dan t2
. —Kirim catatan]
Ekspresi: C1::is_steady
Pengembalian: const bool
Semantik Operasional: true
jika t1 <= t2
selalu benar dan waktu antara detak jam konstan, sebaliknya false
.
Hanya itu yang dimiliki standar tentang perbedaan mereka.
Jika Anda ingin melakukan benchmarking, taruhan terbaik Anda mungkin adalah std::high_resolution_clock
, karena kemungkinan platform Anda menggunakan timer resolusi tinggi (misalnya QueryPerformanceCounter
pada Windows) untuk jam ini. Namun, jika Anda melakukan benchmarking, Anda harus benar-benar mempertimbangkan untuk menggunakan timer khusus platform untuk benchmark Anda, karena platform yang berbeda menangani hal ini secara berbeda. Misalnya, beberapa platform mungkin memberi Anda beberapa cara untuk menentukan jumlah clock sebenarnya dari program yang diperlukan (terlepas dari proses lain yang berjalan pada CPU yang sama). Lebih baik lagi, dapatkan profiler asli dan gunakan itu.