[완료]gettimeofday()함수 사용방법?

hezc81의 이미지

gettimofday()를 이용하여 연산시간을 확인하려고 합니다.
단위를 seconds로 하려고 하는데 제가원하는 값이 나오지않고 큰숫자가 나옵니다.
전 마크로초가 100만분에 1초라서 1000000만을 곱해주었는데 제가연산을 틀린게 한건가요?

long et
 
gettimeofday(&time1, NULL);
 
{
 ...연산부분....
}
 
gettimeofday(&time2, NULL);
 
et = (time2.tv_sec-time1.tv_sec)+(time2.tv_usec-time1.tv_usec)*1000000;
printf("Elapsed time : %ld seconds\n", et);
choco6의 이미지

다음과 같이 쓰십시요.

struct tim result;

result.tv_sec = time2.tv_sec - time1.tv_sec;
result.tv_usec = time2.tv_usec - time1.tv_usec;

if (result.tv_usec < 0)
{
  result.tv_sec--;
  result.tv_usec += 1000000L;
}

return (result.tv_sec + (result.tv_usec/1000000L));
choco6의 이미지

코드 매크로로 감쌌는데도 불구하고 댓글에 코드가 안보이네요..
1000000usec가 1초기 때문에 1000000을 곱하는게 아니라 나누어야 합니다.

ganadist의 이미지

timeval 을 빼거나 더할 때는 sys/time.h에 있는 다음 매크로를 이용하세요.

# define timeradd(a, b, result)                           \
  do {                                        \
    (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;                 \
    (result)->tv_usec = (a)->tv_usec + (b)->tv_usec;                  \
    if ((result)->tv_usec >= 1000000)                         \
      {                                       \
    ++(result)->tv_sec;                           \
    (result)->tv_usec -= 1000000;                         \
      }                                       \
  } while (0)
# define timersub(a, b, result)                           \
  do {                                        \
    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;                 \
    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;                  \
    if ((result)->tv_usec < 0) {                          \
      --(result)->tv_sec;                             \
      (result)->tv_usec += 1000000;                       \
    }                                         \
  } while (0)

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

hezc81의 이미지

매크로함수가 다해결해주네요^^;;

항상 웃으며 살자!!

항상 웃으며 살자!!