std::clock
From cppreference.com
| ヘッダ <ctime> で定義 |
||
| std::clock_t clock(); |
||
プログラムの実行に関連する、実装定義の時代(エポック)の開始以降にプロセスによって使用されたおおよそのプロセッサ時間を返します。戻り値を秒に変換するには、CLOCKS_PER_SEC で割ります。
std::clock の2つの異なる呼び出しの結果の差のみが意味を持ちます。なぜなら、std::clock の時代の開始は、プログラムの開始と一致する必要はないからです。
std::clock の時間は、オペレーティングシステムによってプログラムに与えられた実行リソースに応じて、壁時計よりも速く進んだり遅く進んだりすることがあります。たとえば、CPU が他のプロセスと共有されている場合、std::clock の時間は壁時計よりも遅く進むことがあります。一方、現在のプロセスがマルチスレッドであり、複数の実行コアが利用可能な場合、std::clock の時間は壁時計よりも速く進むことがあります。
目次 |
[編集] 戻り値
これまでにプログラムによって使用されたプロセッサ時間。
- 使用されたプロセッサ時間が利用できない場合は、(std::clock_t)(-1) を返します。
- 使用されたプロセッサ時間を std::clock_t で表現できない場合、未規定の値を返します。
[編集] 例外
何もスローしません。
[編集] 注記
POSIX 互換システムでは、クロックID CLOCK_PROCESS_CPUTIME_ID を指定した clock_gettime は、より高い分解能を提供します。
clock() によって返される値は、一部の実装ではラップアラウンドする可能性があります。たとえば、そのような実装では、std::clock_t が符号付き32ビット整数であり、CLOCKS_PER_SEC が 1'000'000 である場合、約2147秒(約36分)後にラップアラウンドします。
[編集] 例
この例は、clock() の時間と実時間との違いを示しています。
このコードを実行
#include <chrono> #include <ctime> #include <iomanip> #include <iostream> #include <thread> // The function f() does some time-consuming work. void f() { volatile double d = 0; for (int n = 0; n != 10000; ++n) for (int m = 0; m != 10000; ++m) d += d * n * m; } int main() { const std::clock_t c_start = std::clock(); auto t_start = std::chrono::high_resolution_clock::now(); std::thread t1(f); std::thread t2(f); // f() is called on two threads t1.join(); t2.join(); const std::clock_t c_end = std::clock(); const auto t_end = std::chrono::high_resolution_clock::now(); std::cout << std::fixed << std::setprecision(2) << "CPU time used: " << 1000.0 * (c_end - c_start) / CLOCKS_PER_SEC << "ms\n" << "Wall clock time passed: " << std::chrono::duration<double, std::milli>(t_end - t_start) << '\n'; }
実行結果の例
CPU time used: 1590.00ms Wall clock time passed: 808.23ms
[編集] 関連項目
| std::time_t オブジェクトをテキスト表現に変換する (関数) | |
| システムのエポックからの現在の時刻を返す (関数) | |
| C ドキュメント (clock)
| |