計時

1秒単位の計時

最小単位が1秒の精度で良い場合は time() 関数を利用する。 time()関数は以下の書式で利用する。

#include <time.h>

time_t x;
x = time(NULL);

時刻を表す型は、time_t 型であり、1970年1月1日 0時0分0秒からの秒数を持っている。2つの処理にかかった秒数を計りたいときは たとえば以下のようにする。

time_t start, end;
start = time(NULL);
  :
  :(なんらかの処理)
end = time(NULL);
printf("%d秒かかりました\n", end-start);

マイクロ秒単位の計時

gettimeofday()関数を利用すると、マイクロ秒単位で計時できる。 この間数の使用には

#include <sys/time.h>

が必要で、なおかつ、引数として struct timeval 型の変数への ポインタと、struct timezone 型の変数へのポインタが必要とな る。

int gettimeofday(struct timeval *tp, void *);

struct timeval 型の変数に1970年からの秒数と、1秒きっか りからのマイクロ秒が入る。struct timeval構造体は、

struct timeval {
    long    tv_sec;
    long    tv_usec;
};

のように定義されている。2つの処理の間にかかった秒数をマイクロ秒単位で 求めるには、以下のようにする。

#include <sys/time.h>

int main()
{
  struct timeval t1, t2;
  struct timezone dummy;
  float elapse;
  gettimeofday(&t1, &dummy);
    :
    :(なんらかの処理)
  gettimeofday(&t2, &dummy);
  elapse = (t2.tv_sec - t1.tv_sec)
           + (float)(t2.tv_usec - t1.tv_usec)/1000000;
  printf("%f秒経過\n", elapse);
}

gettimeofday()関数に与える第2引数は特に使用しないので ダミーの変数を確保して、そのアドレスを渡せばよい。


目次