시간관련 라이브러리를 참조하신다면, 방법이야 여러가지 있을 수 있겠
죠. 물론, 어느 시점을 시작으로 치고, 어느 시점을 끝으로 치느냐가 문제
가 되겠지만요.
그냥 초단위까지의 시간을 재고 싶으시다면 time, localtime등의 함수를
쓸 수도 있겠구 (time_t 형 변수와 tm구조체가 필요하겠죠) gettimeofday
를 이용해서 micro-second 단위까지 측정할 수도 있습니다. (timeval 구조
체를 이용해야죠). timespec구조체를 이용하면 nano-second까지 측정되는
걸루 압니다. 이용할 수 있는 함수는 뭐가 있는지 잘은 모릅니다^_^a;;
간단한 예제를...
#include
#include
int main()
{
struct timeval t1, t2;
long interval;
gettimeofday(&t1, 0); // 여기서 작업수행 시작시간 측정
/*
* 수행할 작업들^_^a;;;
*/
gettimeofday(&t2, 0); // 여기서 작업수행 종료시간 측정
interval = gettime_proc(&t1, &t2);
return 0;
}
long gettime_proc(const struct timeval *tv1, const struct timeval
*tv2)
{
long dif_sec;
long dif_usec;
이렇게하면...되지 않을까요 ^_^a;;;
물론, 마이크로초 단위로 측정하기땜에 gettimeofday호출 위치에 따라
시간차가 많이 나긴 합니다. 아주 정확하게 측정하기엔 무리가 있져.
메인 함수 호출할때, 글구 gettimeofday함수 호출 및 수행에도 시간이 걸
리니까요.
Re: 프로그램이 시작되고 끝날때까지의 시간을 구하는 함수? 혹
명령어 쉘에서 time을 쓰면 됩니다.
예를 들어 >time a.out 을 하면 됩니다.
real 0m0.010s
user 0m0.010s
sys 0m0.000s
이런 식으로 결과가 나옵니다. context switching을 통해 다른 프로세스
도 함께 돌리니까 실제 이 프로세스에서 걸린 시간도 알 수 있겠죠.
그런데 프로그램 내에서 계산하는 것은 모르겠네요. 그 프로세스 혼자 돈
다면 그냥 시간을 구해서 빼면 되겠는데 실제로 여러 프로세스가 도는 경
우에 그 프로세스가 소요하는 시간에 대해서 검사하는 것은 그냥 카운트
를 해서 하든지 밖에 생각이 안 나네요. 쩝..
일단 위의 방법을 사용해 보세요.
Re: 프로그램이 시작되고 끝날때까지의 시간을 구하는 함수? 혹
시간관련 라이브러리를 참조하신다면, 방법이야 여러가지 있을 수 있겠
죠. 물론, 어느 시점을 시작으로 치고, 어느 시점을 끝으로 치느냐가 문제
가 되겠지만요.
그냥 초단위까지의 시간을 재고 싶으시다면 time, localtime등의 함수를
쓸 수도 있겠구 (time_t 형 변수와 tm구조체가 필요하겠죠) gettimeofday
를 이용해서 micro-second 단위까지 측정할 수도 있습니다. (timeval 구조
체를 이용해야죠). timespec구조체를 이용하면 nano-second까지 측정되는
걸루 압니다. 이용할 수 있는 함수는 뭐가 있는지 잘은 모릅니다^_^a;;
간단한 예제를...
#include
#include
int main()
{
struct timeval t1, t2;
long interval;
gettimeofday(&t1, 0); // 여기서 작업수행 시작시간 측정
/*
* 수행할 작업들^_^a;;;
*/
gettimeofday(&t2, 0); // 여기서 작업수행 종료시간 측정
interval = gettime_proc(&t1, &t2);
return 0;
}
long gettime_proc(const struct timeval *tv1, const struct timeval
*tv2)
{
long dif_sec;
long dif_usec;
if( tv1->tv_sec >= tv2->tv_sec )
dif_sec = tv1->tv_sec - tv2->tv_sec;
else
dif_sec = tv2->tv_sec - tv1->tv_sec;
if( tv1->tv_usec > tv2->tv_usec )
{
dif_usec = tv1->tv_usec - tv2->tv_usec;
}
else
dif_usec = tv2->tv_usec - tv1->tv_usec;
return (dif_sec*1000000 + dif_usec);
}
이렇게하면...되지 않을까요 ^_^a;;;
물론, 마이크로초 단위로 측정하기땜에 gettimeofday호출 위치에 따라
시간차가 많이 나긴 합니다. 아주 정확하게 측정하기엔 무리가 있져.
메인 함수 호출할때, 글구 gettimeofday함수 호출 및 수행에도 시간이 걸
리니까요.
혹시, 제 코드에 문제가 있다면 지적을 해주십쇼=_=;
댓글 달기