티스토리 뷰
☞ 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 :사용자 프로세스의 자 프로세스들 대신 시스템이 사용한 시간
'C | C++' 카테고리의 다른 글
일시의 문자열 변환 (0) | 2018.06.29 |
---|---|
시간과 일자 관련 함수 (0) | 2018.06.29 |
문자열과 실수 변환 (0) | 2018.06.29 |
문자열의 정수 변환 (0) | 2018.06.29 |
산술 연산 함수 (0) | 2018.06.29 |