time 関数
#include <time.h>
time_t time(time_t *t)
- Epoch (00:00:00 UTC, January 1, 1970) からの「秒数」。
- 失敗した場合は -1 が返り、
errnoがセットされる。
clock 関数
#include <time.h>
clock_t clock(void);
- プログラムに使用した CPU(プロセッサ)時間を返す。
- 単位はシステムによって異なり、戻り値を
CLOCKS_PER_SECで割ると、秒数を求められる。この定数値は、Linux の場合 1,000,000、Windows の場合は 1000 になっている。ミリ秒を求めたい場合は、戻り値を(CLOCKS_PER_SEC / 1000)で割ればよい。 - 失敗した場合は -1 を返す。
- 実時間ではなく、CPU 時間を返す。つまり、他に重い処理が裏で走っている場合は実時間は長くなるが、そのプロセスに実際に使用した時間が短ければ
clock()は短い時間を返す。 clock_tが 32bit になる環境では、clock()の戻り値は約 72 秒で一周する。
gettimeofday
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
timeval構造体には、秒 (tv_sec)、マイクロ秒 (tv_usec)が格納される。- 第二引数は obsolete なので NULL を指定する。
- 成功したら 0 を返す。失敗したら -1 を返し、
errnoをセットする。
ちなみに、timeval 構造体同士の演算を行うには、以下のようなマクロを使用します (see: man timeradd)。
#include <sys/time.h>
void timeradd(struct timeval *a, struct timeval *b, struct timeval *res);
void timersub(struct timeval *a, struct timeval *b, struct timeval *res);
void timerclear(struct timeval *tvp);
int timerisset(struct timeval *tvp);
int timercmp(struct timeval *a, struct timeval *b)
timeval の比較は timercmp マクロを使って以下のようにします。
if (timercmp(&a, &b, ==)) { ...等しい場合 ... }
if (timercmp(&a, &b, <)) { ... a < b の場合 ... }
if (timercmp(&a, &b, >)) { ... a > b の場合 ... }