티스토리 뷰

C | C++

시간 측정

야라바 2018. 6. 29. 11:44
728x90

☞ difftime, clock, times

<time.h>

double difftime(time_t time1, time_t time0);
clock_t clock(void);
clock_t times(struct tms *buffer);


통상 time_t 타입의 0 값은 "1970-01-01 00:00:00"를 의미하고 시스템에 따라 다르지만 time_t의 크기가 8바이트인 경우는 2038년까지 표현할 수 있습니다. 그래서 두 시간 사이의 차이를 단순히 time0-time1과 같이 구할 수도 있지만 시스템에 따라 예상치 않은 결과를 초래할 수도 있습니다. time0에서 time1까지의 시간 차이는 difftime()으로 초단위로 구할 수 있습니다.



☞ 예제1

......
if (old_transactions_processed[i] == -1)
{
    trs[0].gauge = 0;
}
else
{
    trs[0].gauge = ((total_trs - old_transactions_processed[i]) / 
                    difftime (cur_time, old_time));
}
......

위의 코드는 큐브리드 DBMS 코드 일부로 difftime()으로 두 시간 사이의 초 간격을 측정하는 것을 참조할 수 있습니다.

clock() 함수는 CPU 클럭값을 리턴합니다. 특정 프로세스의 소요 시간을 측정하는데 사용합니다.



☞ 예제2

......
tstart = clock();
do {
    int parseBufferSize = XMLBufEnd - XMLBufPtr;
    if (parseBufferSize <= bufferSize)
        isFinal = 1;
    else
        parseBufferSize = bufferSize;
    if (!XML_Parse (parser, XMLBufPtr, parseBufferSize, isFinal)) {
        fprintf (stderr, "error '%s' at line %" XML_FMT_INT_MOD \
            "u character %" XML_FMT_INT_MOD "u\n",
            XML_ErrorString (XML_GetErrorCode (parser)),
            XML_GetCurrentLineNumber (parser),
            XML_GetCurrentColumnNumber (parser));
        free (XMLBuf);
        XML_ParserFree (parser);
        exit (4);
    }
    XMLBufPtr += bufferSize;
} while (!isFinal);
tend = clock();
cpuTime += ((double) (tend - tstart)) / CLOCKS_PER_SEC;
......        


위의 코드는 큐브리드 DBMS 코드 일부로 작업 시작/종료 시점에 clock()로 CPU 클럭값을 리턴받아 차이를 구하고 시스템별로 정의되어 있는 CLOCKS_PER_SEC 값으로 나누어 초 단위를 추출하는 과정을 참조할 수 있습니다. times()는 현재 프로세스와 현 프로세스의 자프로세스들이 사용한 CPU 시간을 확인할 때 사용합니다. struct tms 구조체의 포인터를 전달하면 해당 구조체에 정보를 전달하는데 구조체에 담기는 정보들은 아래와 같습니다.

  • clock_t tms_utime :사용자 프로세스가 사용한 시간
  • clock_t tms_stime :사용자 프로세스 대신 시스템이 사용한 시간
  • clock_t tms_cutime :사용자 프로세스의 자 프로세스들이 사용한 시간
  • clock_t tms_cstime :사용자 프로세스의 자 프로세스들 대신 시스템이 사용한 시간




728x90

'C | C++' 카테고리의 다른 글

일시의 문자열 변환  (0) 2018.06.29
시간과 일자 관련 함수  (0) 2018.06.29
문자열과 실수 변환  (0) 2018.06.29
문자열의 정수 변환  (0) 2018.06.29
산술 연산 함수  (0) 2018.06.29