今回はPOSIXで決められている関数を使う方法。
[times関数]
times関数は引数bufにプロセスが消費したクロック数を格納する。
tms構造体はユーザ時間やシステム時間、子プロセスが消費した時間をフィールドとして持っている。
1秒あたりのクロック数は以下で求められる。
sysconf(_SC_CLK_TCK);
例:
[gettimeofday関数]
times関数がクロック数を取得するものであるのに対して、こちらはシステム時刻を取得する関数となる。
また、timeval構造体はマイクロ秒まで保持することができる。
例:
gettimeofdayはシステム時刻を返すため、計測中にシステム時刻が変更された場合は影響を受けてしまう。 また、timeval構造体はtimersubマクロで差分を取得することができる。
しかしながら、現在のLinuxでは今回紹介した関数よりもclock_gettimeの使用が推奨されているようだ。
http://linuxjm.osdn.jp/html/LDP_man-pages/man2/times.2.html
http://linuxjm.osdn.jp/html/LDP_man-pages/man2/gettimeofday.2.html
[times関数]
#include <sys/times.h> clock_t times(struct tms *buf);
times関数は引数bufにプロセスが消費したクロック数を格納する。
tms構造体はユーザ時間やシステム時間、子プロセスが消費した時間をフィールドとして持っている。
1秒あたりのクロック数は以下で求められる。
sysconf(_SC_CLK_TCK);
例:
struct tms start; struct tms end; long elapsed; times(&start); // 計測したい処理... times(&end); elapsed = (long)(end.tms_utime - start.tms_utime);
[gettimeofday関数]
#include <sys/time.h> int gettimeofday(struct timeval *tv, struct timezone *tz);
times関数がクロック数を取得するものであるのに対して、こちらはシステム時刻を取得する関数となる。
また、timeval構造体はマイクロ秒まで保持することができる。
例:
struct timeval start; struct timeval end; struct timeval elapsed; long elapsedusec; gettimeofday(&start, NULL); // 計測したい処理... gettimeofday(&end, NULL); timersub(&end, &start, &elapsed); elapsedusec = 1000 * 1000 * elapsed.tv_sec + elapsed.tv_usec;
gettimeofdayはシステム時刻を返すため、計測中にシステム時刻が変更された場合は影響を受けてしまう。 また、timeval構造体はtimersubマクロで差分を取得することができる。
しかしながら、現在のLinuxでは今回紹介した関数よりもclock_gettimeの使用が推奨されているようだ。
http://linuxjm.osdn.jp/html/LDP_man-pages/man2/times.2.html
http://linuxjm.osdn.jp/html/LDP_man-pages/man2/gettimeofday.2.html
0 件のコメント:
コメントを投稿