C로 시간을 측정하려면 어떻게 해야 하나요?
어떤 코드 블록이 얼마나 (대략) 실행되는지 알고 싶습니다.다음과 같은 경우:
startStopwatch();
// do some calculations
stopStopwatch();
printf("%lf", timeMesuredInSeconds);
어떻게?
를 사용할 수 있습니다.clock
method in time.h
예:
clock_t start = clock();
/*Do something*/
clock_t end = clock();
float seconds = (float)(end - start) / CLOCKS_PER_SEC;
time.h 라이브러리, 특히 시간과 시간 함수를 사용할 수 있습니다.
/* difftime example */
#include <stdio.h>
#include <time.h>
int main ()
{
time_t start,end;
double dif;
time (&start);
// Do some calculation.
time (&end);
dif = difftime (end,start);
printf ("Your calculations took %.2lf seconds to run.\n", dif );
return 0;
}
(위 링크된 difftime 웹 페이지에서 수정한 예)
이 방법에서는 몇 초간의 정확성밖에 얻을 수 없습니다.time_t
는 UNIX 에폭(1970년 1월 1일) 이후의 초수를 기록합니다.
CPU 시간이 아닌 천문학적 시간을 측정해야 하는 경우가 있습니다(특히 Linux의 경우).
#include <time.h>
double what_time_is_it()
{
struct timespec now;
clock_gettime(CLOCK_REALTIME, &now);
return now.tv_sec + now.tv_nsec*1e-9;
}
int main() {
double time = what_time_is_it();
printf("time taken %.6lf\n", what_time_is_it() - time);
return 0;
}
GetTickCount().
#include <windows.h>
void MeasureIt()
{
DWORD dwStartTime = GetTickCount();
DWORD dwElapsed;
DoSomethingThatYouWantToTime();
dwElapsed = GetTickCount() - dwStartTime;
printf("It took %d.%3d seconds to complete\n", dwElapsed/1000, dwElapsed - dwElapsed/1000);
}
Windows API의 Query Performance Counter 및 Query Performance Frequency 함수를 사용합니다.블록 전후에 전자를 호출하여 인스턴스 간의 "틱" 수를 구하려면 (현재 "틱" 수를 얻을 수 있습니다.이 값을 후자 함수로 얻은 값으로 나누면 시간(초)을 얻을 수 있습니다.
환상적인 해상도를 필요로 하지 않는 경우는, GetTickCount():http://msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx 를 사용할 수 있습니다(자신의 간단한 진단 이외의 것을 위해서라면, 이 수치를 정리할 수 있기 때문에, 약간의 산술로 처리할 필요가 있습니다).
Query Performance Counter도 합리적인 옵션입니다.(MSDN에도 기재되어 있습니다)
표준 C 라이브러리는time
이 기능은, 초수를 비교할 필요가 있는 경우에 편리합니다.단, 밀리초의 정밀도가 필요한 경우 가장 휴대성이 좋은 방법은timespec_get
시스템이 지원하는 경우 최대 나노초의 정밀도를 알 수 있습니다.그러나, 그것을 부르는 것은 구조를 수반하기 때문에 조금 더 많은 노력이 필요하다.여기 구조를 단순한 64비트 정수로 변환하는 기능이 있습니다.
#include <stdio.h>
#include <inttypes.h>
#include <time.h>
int64_t millis()
{
struct timespec now;
timespec_get(&now, TIME_UTC);
return ((int64_t) now.tv_sec) * 1000 + ((int64_t) now.tv_nsec) / 1000000;
}
int main(void)
{
printf("Unix timestamp with millisecond precision: %" PRId64 "\n", millis());
}
와는 달리clock
이 함수는 Unix 타임스탬프를 반환하여 다음과 같은 블로킹 기능에 소요된 시간을 올바르게 계산합니다.sleep
이 속성은 실행 시간을 고려한 지연 벤치마킹 및 구현에 도움이 됩니다.
언급URL : https://stackoverflow.com/questions/3557221/how-do-i-measure-time-in-c
'programing' 카테고리의 다른 글
Vuej에는 변수와 함수를 공유하는 여러 구성 요소가 있습니다. (0) | 2022.07.16 |
---|---|
구성 요소 변환 후 Vuex 상태 가져오기 (0) | 2022.07.16 |
업데이트 시 vuex 상태 업데이트 UI를 만드는 방법 (0) | 2022.07.16 |
Vue TypeError _vm이 함수가 아닙니다. (0) | 2022.07.16 |
Vue 상세 감시가 개체 속성 변경에 대해 작동하지 않음 (0) | 2022.07.10 |