2009-09-23 16 views
22

मैं अपने कार्यक्रम के कुछ हिस्सों के निष्पादन द्वारा उठाए गए मिलीसेकंड में समय की गणना करना चाहता हूं। मैं ऑनलाइन देख रहा हूं, लेकिन इस विषय पर ज्यादा जानकारी नहीं है। आप में से कोई भी यह कैसे जानता है?मिलीसेकंड में सी प्रोग्राम में बीत चुके समय की गणना

+0

सम्मेलन के साथ लाइन में और अधिक Retagged। – dmckee

+1

एचएम ... क्या मैंने एक सप्ताह पहले इस प्रश्न का उत्तर नहीं दिया था: http://stackoverflow.com/questions/1444428/time-stamp-in-the-c-programming-language/1445808#1445808 – Christoph

उत्तर

2

सी पुस्तकालयों में आपको सिस्टम का समय प्राप्त करने के लिए एक फ़ंक्शन है। आप स्टार्ट और स्टॉप टाइम्स कैप्चर करने के बाद बीत चुके समय की गणना कर सकते हैं।

फ़ंक्शन को gettimeofday() कहा जाता है और आप यह जानने के लिए मैन पेज को देख सकते हैं कि इसमें क्या शामिल होना है और इसका उपयोग कैसे किया जाए।

0

Windows पर, आप सिर्फ यह कर सकते हैं:

DWORD dwTickCount = GetTickCount(); 

// Perform some things. 

printf("Code took: %dms\n", GetTickCount() - dwTickCount); 

नहीं सबसे सामान्य/सुरुचिपूर्ण समाधान है, लेकिन अच्छा और त्वरित आवश्यकता पड़ने पर नियंत्रित।

3

gettimeofday समारोह (, अगर मंच है कि समर्थन कर सकते हैं निश्चित रूप से) माइक्रोसेकंड परिशुद्धता के साथ समय देता है:

gettimeofday() फ़ंक्शन वर्तमान समय प्राप्त करेगा, सेकंड और माइक्रोसेकंड के बाद के रूप में व्यक्त युग, और समय-समय पर इसे स्टोर करें संरचना टीपी द्वारा इंगित की गई। सिस्टम घड़ी का संकल्प निर्दिष्ट नहीं है।

+1

'gettimeofday' isn दो घटनाओं के बीच विलुप्त समय को मापने के लिए बहुत अच्छा नहीं है, क्योंकि सिस्टम समय-समय पर घड़ी घटनाओं के बीच बदला जा सकता है (उदाहरण के लिए। एनटीपी अपडेट द्वारा, या बस व्यवस्थापक कार्रवाई)। (कभी-कभी यह * उपलब्ध सर्वोत्तम चीज़ है)। – caf

4

एक और विकल्प (कम से कम कुछ यूनिक्स पर) clock_gettime और संबंधित कार्य है। ये विभिन्न रीयलटाइम घड़ियों तक पहुंच की इजाजत देता है और आप उच्च रिज़ॉल्यूशन वाले लोगों में से एक का चयन कर सकते हैं और उस रिज़ॉल्यूशन को फेंक सकते हैं जिसकी आपको आवश्यकता नहीं है। जवाब देने के लिए

+1

विशेष रूप से, 'CLOCK_MONOTONIC' घड़ी, यदि आप जिस सिस्टम पर चल रहे हैं उसका समर्थन करता है ('sysconf (_SC_MONOTONIC_CLOCK)> 0')। – caf

34

सबसे अच्छा तरीका है एक उदाहरण के साथ है:

#include <sys/time.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 

/* Return 1 if the difference is negative, otherwise 0. */ 
int timeval_subtract(struct timeval *result, struct timeval *t2, struct timeval *t1) 
{ 
    long int diff = (t2->tv_usec + 1000000 * t2->tv_sec) - (t1->tv_usec + 1000000 * t1->tv_sec); 
    result->tv_sec = diff/1000000; 
    result->tv_usec = diff % 1000000; 

    return (diff<0); 
} 

void timeval_print(struct timeval *tv) 
{ 
    char buffer[30]; 
    time_t curtime; 

    printf("%ld.%06ld", tv->tv_sec, tv->tv_usec); 
    curtime = tv->tv_sec; 
    strftime(buffer, 30, "%m-%d-%Y %T", localtime(&curtime)); 
    printf(" = %s.%06ld\n", buffer, tv->tv_usec); 
} 

int main() 
{ 
    struct timeval tvBegin, tvEnd, tvDiff; 

    // begin 
    gettimeofday(&tvBegin, NULL); 
    timeval_print(&tvBegin); 

    // lengthy operation 
    int i,j; 
    for(i=0;i<999999L;++i) { 
     j=sqrt(i); 
    } 

    //end 
    gettimeofday(&tvEnd, NULL); 
    timeval_print(&tvEnd); 

    // diff 
    timeval_subtract(&tvDiff, &tvEnd, &tvBegin); 
    printf("%ld.%06ld\n", tvDiff.tv_sec, tvDiff.tv_usec); 

    return 0; 
} 
संबंधित मुद्दे