clock() - プロセッサー時間の判別

標準

標準/拡張機能 C/C++ 依存項目

ISO C
POSIX.1
XPG4
XPG4.2
C99
Single UNIX Specification、バージョン 3

両方  

形式

#include <time.h>

clock_t clock(void);

機能説明

プログラムの起動に関連するインプリメンテーションで 定義された時間枠の開始以降、プログラムが使用した プロセッサー時間を概算します。プログラムで使用された時間を測るには、プログラムの先頭 で clock() 関数を呼び出し、その戻り値を、その後の clock() の呼び出し で戻った値から減算してください。次に、秒単位の時間を知るには、clock() で戻った値 を CLOCKS_PER_SEC で割ります。

プログラムの中に system() 関数を使用する場合、プログラムの時間 計測の際に clock() を使用しないでください。system() を呼び出すと クロックが再設定されることがあるためです。

マルチスレッド POSIX C アプリケーションでは、POSIX.4a ドラフト標準 に基づいた関数を使用してスレッドを作成する場合、clock() 関数は、スレッドのスコープに入ります。

戻り値

時間が有効かつ提示可能な場合、clock() は計算値を戻します。

正常に実行されなかった場合、clock() は、(clock_t)-1 を戻します。MVS™/ESA バージョン 3 リリース 1 修正レベル 2 (またはそれ以前の) システムで STIMER REAL TQE を使用して実行中のときに、clock() は、-1 を戻すことがあります。

XPG4 の特殊な動作: アプリケーションのコンパイル時に、_XOPEN_SOURCE また は _XOPEN_SOURCE_EXTENDED が定義されると、CLOCKS_PER_SEC が 1000000 に 定義されます。また、この場合、<time.h> ヘッダーの以下 の C/370™ プラグマを使って、アプリケーションを コンパイルします。
#pragma map ( clock(), "@@OCLCK")

このプラグマのために、アプリケーションを実行する と、1000000 CLOCKS_PER_SEC の単位で clock_t 値を戻す XPG4 版 の clock() に、アプリケーションはアクセスしようとします。XPG4 版の clock() を使用できるのは、アプリケーションの実行のため に POSIX(ON) を指定した場合だけです。

プログラムをコンパイルし、さらに、POSIX(OFF) を指定して アプリケーションを実行するとき、_XOPEN_SOURCE また は _XOPEN_SOURCE_EXTENDED が定義されている と、clock() は、(clock_t)-1 を戻します。

アプリケーションのコンパイル時に _XOPEN_SOURCE また は _XOPEN_SOURCE_EXTENDED のどちらも定義されていない 場合、CLOCKS_PER_SEC の実在の C/370 値が使用され、アプリケーション での clock() 呼び出しが clock() の実在の C/370 版にマップされます。この C/370 版の clock() は、アプリケーションが POSIX(ON) また は POSIX(OFF) のどちらで実行されても、実在の C/370 CLOCKS_PER_SEC 単位 で clock_t 値を戻します。

/*  This example prints the time elapsed since the program was invoked.  */
#include <time.h>
#include <stdio.h>

double time1, timedif;   /* use doubles to show small values */

int main(void)
{
    time1 = (double) clock();            /* get initial time */
    time1 = time1 / CLOCKS_PER_SEC;      /*    in seconds    */
⋮
    /* call clock a second time */
    timedif = ( ((double) clock()) / CLOCKS_PER_SEC) - time1;
    printf("The elapsed time is %f seconds¥n", timedif);
}