programing

C - 계산 시간을 알 수 있습니까?

closeapi 2023. 10. 8. 09:53
반응형

C - 계산 시간을 알 수 있습니까?

컴퓨팅 시간을 측정하는데 get time of day를 사용하는 방법을 알고 있습니까?나는 이 코드로 한 번 측정할 수 있습니다.

  char buffer[30];
  struct timeval tv;

  time_t curtime;



 gettimeofday(&tv, NULL); 
 curtime=tv.tv_sec;

 strftime(buffer,30,"%m-%d-%Y  %T.",localtime(&curtime));
 printf("%s%ld\n",buffer,tv.tv_usec);

이것은 컴퓨팅 전에 만들어진 것이고, 두 번째 것입니다.그런데 뺄 줄 아세요?

밀리초 안에 결과가 필요합니다.

시간 간격을 빼는 방법:

gettimeofday(&t0, 0);
/* ... */
gettimeofday(&t1, 0);
long elapsed = (t1.tv_sec-t0.tv_sec)*1000000 + t1.tv_usec-t0.tv_usec;

사용된 유형에 따라 연산이 오버플로될 수 있는 ~2000초보다 짧은 간격으로 작업한다는 가정입니다.더 긴 간격으로 작업해야 하는 경우 마지막 줄을 다음으로 변경합니다.

long long elapsed = (t1.tv_sec-t0.tv_sec)*1000000LL + t1.tv_usec-t0.tv_usec;

@Daniel Kamil Kozar가 제시한 정답은 정확한 답입니다. - get time of day는 실제로 경과된 시간을 측정하는 데 사용되어서는 안 됩니다.대신 clock_gettime(CLOCK_MONOTONIC)을 사용합니다.


맨 페이지는 다음과 같이 말합니다. gettime of day()에 의해 반환되는 시간은 시스템 시간의 불연속적인 점프(예: 시스템 관리자가 수동으로 시스템 시간을 변경하는 경우)에 영향을 받습니다.단조롭게 증가하는 시계가 필요하다면 clock_gettime(2)을 참조하십시오.

Opengroup(열린 그룹)은 - 응용 프로그램은 낡은 get time of day() 함수 대신 clock_gettime() 함수를 사용해야 한다고 말합니다.

작동하지 않거나 작동하지 않는 경우(VxWorks)에 직면할 때까지 모든 사람이 하루의 시간을 얻는 것을 좋아하는 것 같습니다. ... clock_get time은 환상적으로 멋지고 휴대하기 쉽습니다.

<<

코드 효율성을 측정하거나 다른 방법으로 시간 간격을 측정하려면 다음이 더 쉬워집니다.

#include <time.h>

int main()
{
   clock_t start = clock();
   //... do work here
   clock_t end = clock();
   double time_elapsed_in_seconds = (end - start)/(double)CLOCKS_PER_SEC;
   return 0;
}

hth

아니요. get time of day는 절대 시간을 측정하는 데 사용해서는 안됩니다.

이것은 도처에 벌레를 일으키고 있습니다.버그를 더 추가하지 말아주세요.

당신의.curtimevariable은 에포크 이후의 시간(초)을 유지합니다.앞뒤에 하나씩 있으면 나중에 하나를 뺀 것이 경과 시간(초)입니다.뺄 수 있습니다.time_t값은 아주 좋습니다.

언급URL : https://stackoverflow.com/questions/5362577/c-gettimeofday-for-computing-time

반응형