나는 여태 시간 측정을 할때 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의 시간만을 재는 clock
을 Cpu time 이라고 한다.
Visual Studio
의 clock()
은 Wall clock time 이기 때문에 그대로 써도 상관이 없다.
######Crossflatform 코딩을 위한것은 아래 링크를 참고하자.