c에서 프로그램 수행시간재는법?
void main(){
clock_t time;
time=clock(); // Time Check Start
( 시간을 잴 이런 저런 실행문들 내지 함수)
time=clock()-time; // Time Check End
printf("%f초입니다.",(double)time/CLOCKS_PER_SEC);
}
msec (밀리세컨드) 단위로 시간을 재는 함수 좀 알려주세요.
윈도우 환경이 아니기 때문에 API 같은것은 사용할 수 없고요,
순수 ANSI C 환경에서 할 수 있는 함수 같은거 없을까요... ( C++ 도 가능 )
------------------------------------------------------------------------------------------------
gettimeofday가 있습니다.
sys/time.h 를 반드시 include해주셔야 하구요,
윈도우환경 아니더라도 얼마든지 사용하실수 있습니다.
샘플)
#include <stdio.h>
#include <sys/time.h>
main() {
struct timeval time; // struct timeval은 반드시 선언
gettimeofday(&time, NULL); // 현재시간을 가져온다.
printf("초 : %ld, 밀리초 : %ld\n", time.tv_sec, time.tv_usec);
}
결과값의 밀리초는 현재 초의 밀리초구요~
1. Header file
#include <unistd.h>
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz)
2. Description
time ( ) 과 매우 비슷하지만 마이크로초 단위의 시간 까지 되돌려준다. 현재는 time ( ) 을 대신해서 쓰이고 있으며, 가능한 time ( ) 대신 이 함수를 사용하는 걸 권장한다.
첫번째 인자인 tv는 현재 시스템 시간을 저장하기 위한 구조체로 다음과 같이 정의되어 있다.
struct timeval {
long tv_sec; // 초
long tv_usec; // 마이크로초
}
두번째 인자인 tz은 타임존을 설정하기 위해서 사용된다.
struct timezone {
int tz_minuteswest: // 그리니치 서측분차
int tz_dsttime; // DST 보정타입(일광 절약시간)
}
현재 timezone 구조체는 사용되지 않고 있으며, 앞으로도 지원되지 않을 것이다. 간혹 커널 소스등에서 이 필드가 사용되는 경우가 있는데, 모든 경우에 버그로 판단되어서 무시한다. 복잡하게 생각할 필요 없이 tz로 NULL을 사용하도록 한다.
3. Return Value
성공 시 0, 실패 시 -1을 반환한다.
4. Example
#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main()
{
struct timeval mytime;
// 현재 시간을 얻어온다.
gettimeofday(&mytime, NULL);
printf("%ld:%ld\n", mytime.tv_sec, mytime.tv_usec);
// 시간을 1시간 뒤로 되돌려서 설정한다.
mytime.tv_sec -= 3600;
settimeofday(&mytime, NULL);
return 0;
}
5. Reference
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/gettimeofday
'C & C++ 관련' 카테고리의 다른 글
윈도우에서 struct timeval 을 이용한 시간 출력 (0) | 2007.05.22 |
---|---|
UNIX 운영체제 Scheduling 시뮬레이션, (0) | 2007.05.12 |
클래스를 이용한 계좌 관리 프로그램 연습 (0) | 2007.05.09 |