2011-05-06 5 views
5
#import <stdio.h> 
#import <time.h> 

int main (void) { 

    printf("Clock ticks per second: %d\n", CLOCKS_PER_SEC); 
    double check = clock(); 
    int timex = time(NULL); 

    for (int x = 0; x <= 500000; x++) { 

     printf("."); 

    } 
    puts("\n"); 

    printf("Total Time by Clock: %7.7f\n", (clock() - check)/CLOCKS_PER_SEC); 
    printf("Total Time by Time: %d\n", time(NULL) - timex); 

    getchar(); 
} 

내가 같은 결과를 얻을 : 시간에 의해 0.0108240나쁜 결과 : 시간 (NULL)와 시계() 나는 위의 코드를 실행하면

총 시간 : 시계에 의해

총 시간을 12

clock()에 가능한 한 시간으로 숫자를 표시하고 싶습니다.

위의 총 시간은 맥북에서했지만 코드는 내 랩톱 (Windows)에서 훌륭하게 작동합니다.

CLOCKS_PER_SECOND 매크로는 PC에서 1000, MAC에서 1,000,000을 반환합니다.

답변

8

windows의 clock()은 시계의 시간을 반환합니다. * nixes의 clock()은 프로그램에서 소비 한 CPU 시간을 반환합니다. 많은 시간이 걸리지는 않습니다. 여기에서 I/O를 할 때 차단 될 가능성이 있습니다.

+0

감사합니다. 벽에 시계 시간을 엄격하게 C 표준 라이브러리 사용만을 사용하여 구현할 수있는 Mac 용 일 라운드 있습니까? 예 : – Crosility

+0

gettimeofday() – nos

+0

또는보다 최신의'clock_gettime'은 나노초 해상도까지 제공 할 수 있습니다. –

0

time_t을 반환합니다. int에 할당하면 정보를 잃을 가능성이 있습니다. 전체에서 time_t을 사용하면 어떻게됩니까? 콘솔로

int main(void) { 
    time_t timex = time(0); 
    /* ... */ 
    printf("%d", (int)(time(0) - timex)); 
} 
+2

dif_time을 사용하여'time_t' 차이를 계산하십시오. –

+0

시간 (0)을 사용하는 데 문제가 없습니다. clock() 만 사용하십시오. 그러나 도움을 주셔서 감사합니다. 시간 (0)은 지정된 날짜 이후 초 단위로 반환하는 것과 같이 올바르게 작동하는 것 같습니다. – Crosility

1

의 printf()는 처리 시간을 계산하지 않는 시스템의 각 functon 호출에 대한 전화 및 콘솔 다시 그리기 차단 소요되는 시간 등을합니다.

무거운 계산을하십시오.

for (long int x = 0; x <= 5000000000; x++) { 
    sqrt(2.9999); 
} 
+0

clock()은 프로세스 자체의 활성 사용만을 계산합니까? 추적하지 말, 응용 프로그램 시작부터 한 지점까지의 타임 스탬프? – Crosility

+0

구현에 따라 다릅니다. 일부 유닉스 구현은 기다린 자식 프로세스 CPU 시간만큼 카운트하며, 다른 것은 프로세스 CPU 시간을 호출하는 것입니다. 어쨌든, 프로세스가 printf()를 호출하려고 시도하고 xterm 입력 파이프가 가득 차서 차단 된 경우이 차단 시간은 clock() ...으로 계산되지 않습니다. Windows를 제외한 모든 시스템에서 clock() CPU 사용이 아닌 시계 시간. 가능한 경우 clock()을 사용하지 마십시오. times() 및 getrusage()와 같이 훨씬 더 정의 된 호출이 있습니다. – blaze

+0

블레이즈 감사합니다. 이미 앱을 출시 한 후, clock()을 인식하게되었습니다. NSTimer는 실제 시간을 호출하는 것만 큼 효율적이지 않습니다. :) 도와 주셔서 감사합니다. – Crosility

관련 문제