[C] linux 시간측정 gettimeofday

나는 여태 시간 측정을 할때 clock() 함수를 사용했는데, 지난번 sandbox 를 구현하면서 시간이 잘 측정이 안되길래 Sleep() 를 하는동안은 측정을 못하는걸 대충 알고는 있었다.

리눅스에서 clock() 함수는 cpu시간만을 측정하기 때문에 정확한 측정에는 사용하면 안된다.

Sleep()를 쓰지 않아도 cpu가 점유하지 않을땐 측정을 안하는거니까..

여태까지 측정방법이 다 잘못되었구만...-_-

어쨋든 사용방법은 아래와 같다.

#include<sys/time.h>    //gettimeofday, struct time val
#include<stdio.h>       //printf
#include<unistd.h>      //sleep
int main(){
        struct timeval bgn,end;
        double diff;
        gettimeofday(&bgn, NULL);
        sleep(1);
        gettimeofday(&end, NULL);
        diff = end.tv_sec + end.tv_usec / 1000000.0 - bgn.tv_sec - bgn.tv_usec / 1000000.0;
        printf("%f\n", diff);
        return 0;
}

이런 gettimeofday 같은 함수로 측정하는것을 Wall clock time 이라 하고, cpu의 시간만을 재는 clockCpu time 이라고 한다.

Visual Studioclock()Wall clock time 이기 때문에 그대로 써도 상관이 없다.


Crossflatform 코딩을 위한것은 아래 링크를 참고하자.

http://kimbom.co.kr/c-c-cross-platform-coding/