티스토리 뷰


마이크로초 단위 시간을 측정하여 비교하기 위해서 gettimeofday() 메소드를 사용합니다.

아래와 같이 측정할 수 있습니다.
struct timeval tp;
gettimeofday(&tp, NULL);

timeval구조체의 tv_sec에 해당 초의 값이, tv_usec에 해당 마이크로초가 들어갑니다.


그럼 이럴땐 어떻게 해야 할까요?
"123을 출력하고 0.5초뒤에 456을 출력하자"

쉽게 생각하면 timeval 구조체를 두개 정의한 뒤 시작 지점에서 시간 값을 측정하고,
루프를 돌면서 tv_usec을 비교하며 두 값의 차이가 500000이 되었을 때 루프를 나오면 될 것입니다.

코드는 아래와 같이 되겠죠
struct timeval tpstart, tpend;
printf("123\n");
gettimeofday(&tpstart, NULL);
while(1)
{
    gettimeofday(&tpend, NULL);
    if(tpend.tv_usec - tpstart.tv_usec > 500000)
        break;
}
printf("456\n");

그렇다면, 위와 같이 했을 때 코드가 정상동작 할까요?

그런 경우도 있을 것이고, 123 까지만 출력되고 456이 출력되지 않는 경우도 있을 것입니다.
왜 그럴까요?

왜냐면 tv_usec의 값은 tv_sec의 값이 증가되었을 때 0부터 다시 시작하기 때문이죠.

예를 들어, 1.9초에서 2.1초가 되었다면
아무리 비교해도 마이크로초 단위만으로는 500000의 차이가 날 수 없겠죠.

그래서 tv_usec의 크기에 따라 적절히 조건문을 이용하여 비교해야 정확한 결과를 가져올 수 있을 것입니다.


댓글