2011-05-06 8 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

कुल समय समय से: 12

मैं घड़ी() को समय के साथ जितना संभव हो उतना निकट प्रतिनिधित्व करना चाहता हूं।

ऊपर प्रस्तुत कुल समय मैकबुक पर किया गया था, हालांकि, कोड मेरे लैपटॉप (विंडोज़) पर उत्कृष्ट काम करता है।

CLOCKS_PER_SECOND मैक्रो पीसी पर 1000, मैक पर 1,000,000 रिटर्न देता है।

उत्तर

8

घड़ी() खिड़कियों पर दीवार घड़ी का समय देता है। घड़ी() पर * nixes आपके प्रोग्राम ने खर्च किए गए CPU समय को वापस कर दिया है, जो बहुत कुछ नहीं होने वाला है, आप यहां I/O करते समय अवरुद्ध हो सकते हैं।

+0

धन्यवाद नहीं। क्या मैक के लिए कोई काम-एक-दौर है जो दीवार घड़ी घड़ी को दीवार घड़ी के समय को लागू करने के लिए कर सकता है जो कड़ाई से सी है, केवल मानक लाइब्रेरी उपयोग का उपयोग कर? – Crosility

+0

उदाहरण उदा। gettimeofday() – nos

+0

या अधिक आधुनिक 'clock_gettime', जो नैनोसेकंद संकल्प प्रदान कर सकता है। –

0

time()time_t देता है। जब आप int पर असाइन करते हैं तो यह संभव है कि आप जानकारी खो दें। यदि आप time_t का उपयोग करते हैं तो क्या होता है?

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

'time_t' मतभेदों की गणना करने के लिए भिन्नता का उपयोग करें। –

+0

मुझे समय (0), केवल घड़ी() का उपयोग करने में कोई समस्या नहीं है। हालांकि मदद के लिए धन्यवाद। समय (0) ऐसा काम करता है जैसा कि इसे करना चाहिए - एक निश्चित तिथि के बाद सेकंड में समय लौटा रहा है। – Crosility

1

printf() सांत्वना देने की प्रक्रिया में समय के लिए गिनती नहीं है प्रत्येक functon कॉल के लिए सिस्टम कॉल, और कंसोल redrawing में अवरुद्ध बिताए समय, आदि बनाता है।

कुछ भारी गणनाएं करें।

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

क्या आप कह रहे हैं कि घड़ी() केवल प्रक्रिया के सक्रिय उपयोग की गणना करता है? ट्रैकिंग नहीं, कहें: एक टाइमस्टैम्प, एप्लिकेशन की शुरुआत से एक बिंदु तक? – Crosility

+0

यह कार्यान्वयन निर्भर है। कुछ यूनिक्स कार्यान्वयन जितना इंतजार कर रहे हैं उतना ही सीपीयू समय की प्रक्रिया करता है, अन्य बस कॉलिंग प्रक्रिया सीपीयू समय। वैसे भी, अगर आपकी प्रक्रिया ने printf() को कॉल करने का प्रयास किया था और xterm इनपुट पाइप भरने के कारण अवरुद्ध किया गया था - यह अवरुद्ध समय निश्चित रूप से घड़ी() ... में सभी सिस्टमों पर नहीं गिना जाएगा लेकिन विंडोज़: घड़ी() घड़ी दीवार- घड़ी का समय, सीपीयू उपयोग नहीं। आम तौर पर, यदि संभव हो तो घड़ी() का उपयोग करने से बचें: कई बेहतर परिभाषित कॉल जैसे समय() और getrusage() हैं। – blaze

+0

धन्यवाद पहले से ही एक ऐप जारी करने के बाद, मुझे पता चला है कि घड़ी(), और एनएसटीमर बस वास्तविक समय को कॉल करने के रूप में उतने कुशल नहीं हैं। :) सहायता के लिए धन्यवाद। – Crosility

संबंधित मुद्दे