8-3-다.기타 시간 함수

시간은 여러 모로 쓸 데가 많은 정보이다. 다음 함수는 프로그램이 실행을 시작한 후의 경과된 시간(Process Time)을 조사한다.

 

clock_t clock( void );       

 

clock_t 타입은 long형으로 정의되어 있으며 이 함수가 조사한 값을 CLOCKS_PER_SEC으로 나누면 프로그램 실행 후의 경과 초를 알 수 있다. 이 값은 시스템에 따라 다른데 윈도우즈에서는 1000으로 정의되어 있다.

 

typedef long clock_t;

#define CLOCKS_PER_SEC  1000

 

실행 후의 경과 시간 자체는 별로 쓸 데가 없지만 두 작업 시점간의 시간을 계산하거나 일정한 시간만큼 특정 작업을 계속하고 싶을 때 clock 함수가 조사하는 시간이 기준점으로 사용될 수 있다. 다음 예제는 3초간 어떤 작업을 반복적으로 수행한다.

 

: clock

#include <Turboc.h>

 

void main()

{

     clock_t t1,t2;

     int count=0;

 

     t1=clock();

     for (;;) {

          printf("기다리십시오. %d\n",count++);

          t2=clock();

          if (t2-t1 > 3*CLOCKS_PER_SEC) {

              break;

          }

     }

     printf("끝났습니다.\n");

}

 

t1에 최초 시간을 조사해 놓고 루프를 돌면서 t2를 다시 구해 이 두 시간끼리의 차가 3000이 될 때를 3초로 계산할 수 있다. delay도 정확한 시간을 지연시키기는 하지만 기다리는동안 다른 일을 할 수 없다는 점이 다르다. 시스템 속도에 상관없이 일정 시간동안 어떤 작업을 하고 싶다면 clock 함수로 구한 시간을 이용하면 된다. 다음 함수는 두 시간값의 차를 구해준다.

 

double difftime(time_t timer1, time_t timer0);

 

조사된 두 개의 시간을 인수로 전달하면 두 시간의 차이를 리턴하는데 다음 예제는 다소 복잡한 수학 계산 10만번을 하는데 걸린 시간을 측정한다.

 

: difftime

#include <Turboc.h>

#include <math.h>

 

void main()

{

     int i;

     time_t t1,t2;

    

     time(&t1);

     for (i=0;i<100000;i++) {

          printf("결과 = %f\n",sin(i*3.1416/180) * cos(i*3.1416/180));

     }

     time(&t2);

     printf("총 %.2f초가 걸렸습니다.",difftime(t2,t1));

}

 

실수형을 리턴하는 것으로 되어 있지만 계산 결과가 초단위로 되어 있기 때문에 정밀한 시간 계산이나 코드의 성능 측정 등에 쓰기에는 무리가 있다.