std::clock
| ヘッダ <ctime> で定義
|
||
std::clock_t clock(); |
||
プログラムの実行に相対的な処理系定義の開始点からのプロセスが使用した概算プロセッサ時間を返します。 結果の値を秒に変換するには CLOCKS_PER_SEC で割ってください。
std::clock の開始点がプログラムの開始と一致する必要はないため、異なる std::clock の呼び出しによって返された2つの値の間の差のみが意味を持ちます。 std::clock の時間は、オペレーティングシステムによってプログラムに与えられた実行リソースによって、壁時計より早く進む可能性も遅く進む可能性もあります。 例えば、 CPU が他のプロセスと共有されている場合、 std::clock は壁時計より遅く進む可能性があります。 一方、現在のプロセスがマルチスレッド化されていて、2個以上の実行コアが利用可能な場合、 std::clock 時間は壁時計より早く進む可能性があります。
引数
(なし)
戻り値
プログラムによってそれまでに使用されたプロセッサ時間、または情報が利用できないかその値が表現できない場合は (clock_t)(-1)。
例外
(なし)
ノート
POSIX 互換のシステムでは、 clock_id に CLOCK_PROCESS_CPUTIME_ID を指定した clock_gettime がより良い分解能を提供します。
処理系によっては clock() によって返される値がオーバーラップする場合があります。 例えば、32ビットの std::clock_t を持つマシンでは、2147秒または36分後にラップします。
一部の非準拠な処理系では clock() の戻り値はラップアラウンドすることがあります。 例えば、そのような処理系では、 std::clock_t が32ビット整数で CLOCKS_PER_SEC が 1000000 であれば、約2147秒 (約36分) で一周するでしょう。
例
この例は clock() 時間と実時間の違いをデモンストレーションします。
#include <iostream>
#include <iomanip>
#include <chrono>
#include <ctime>
#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()
{
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();
std::clock_t c_end = std::clock();
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).count()
<< " ms\n";
}
出力:
CPU time used: 1590.00 ms
Wall clock time passed: 808.23 ms
関連項目
time_t オブジェクトをテキスト表現に変換します (関数) | |
| 現在のシステム時刻をエポックからの経過時間として返します (関数) | |
clock の C言語リファレンス
|