2010-08-24 7 views
30

मैं यह जानना चाहता हूं कि कोड के कुछ ब्लॉक कितने समय तक (लगभग) ब्लॉक निष्पादित होते हैं। कुछ इस तरह:मैं सी में समय कैसे मापूं?

startStopwatch(); 
// do some calculations 
stopStopwatch(); 
printf("%lf", timeMesuredInSeconds); 

कैसे?

+1

आपका मंच क्या है? – pmod

+0

@Pmod प्लेटफार्म से आपका क्या मतलब है? मेरा ओएस विंडोज है। – snakile

+1

आप कौन सा रिज़ॉल्यूशन हासिल करना चाहते हैं, और आप कितने संचित ओवरहेड को बर्दाश्त करने के इच्छुक हैं? –

उत्तर

47

आप में time.h

उदाहरण clock विधि का उपयोग कर सकते हैं:

/* difftime example */ 
#include <stdio.h> 
#include <time.h> 

int main() 
{ 
    time_t start,end; 
    double dif; 

    time (&start); 
    // Do some calculation. 
    time (&end); 
    dif = difftime (end,start); 
    printf ("Your calculations took %.2lf seconds to run.\n", dif); 

    return 0; 
} 

(उदाहरण से अनुकूलित:

clock_t start = clock(); 
/*Do something*/ 
clock_t end = clock(); 
float seconds = (float)(end - start)/CLOCKS_PER_SEC; 
+0

+1: अच्छा और सरल। हालांकि, अगर आप एक सेकंड के अंश प्राप्त करना चाहते हैं, तो क्या आपको विभाजन से पहले एक फ्लोटिंग पॉइंट पर '(एंड-स्टार्ट)' डालना होगा? – torak

+0

@torak हाँ, मुझे लगता है कि आप सही हैं, मुझे इसका परीक्षण करने का मौका नहीं मिला है। – KLee1

+0

या 1.0 –

16

आप time.h पुस्तकालय, विशेष रूप से time और difftime कार्यों का उपयोग कर सकते हैं ऊपर से जुड़े विभिन्न वेबपृष्ठ।)

कृपया ध्यान दें कि यह विधि केवल सेकंड की सटीकता प्रदान कर सकती है - time_tUNIX epoch (1 जनवरी, 1 9 70) के बाद से सेकंड रिकॉर्ड करता है।

+0

यह केवल सेकंड सटीकता देता है। और आपका उदाहरण वास्तव में '' का उपयोग नहीं करता है। – Dummy00001

+0

क्षमा करें, 'सी' एक टाइपो था - ctime लाइब्रेरी को 'time.h' में परिभाषित किया गया है। और हाँ, यह केवल सेकंड सटीकता देता है। पोस्टर को ध्यान में रखते हुए "लगभग" कहा, मैंने पर्याप्त माना।मैं इस तथ्य को शामिल करने के लिए अपने उत्तर को संपादित करूंगा कि यदि आप चाहें तो यह केवल सेकंड स्तर की सटीकता प्रदान करेगा। – Stephen

0

आप शानदार संकल्प की जरूरत नहीं है, तो आप GetTickCount() इस्तेमाल कर सकते हैं: http://msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx (यदि यह अपनी खुद की सरल निदान के अलावा कुछ के लिए है, तो ध्यान दें कि इस संख्या के आसपास लपेट कर सकते हैं, तो आप को प्रबंधित करना होगा कि थोड़ा अंकगणित के साथ)।

क्वेरीरीफॉर्मेंस काउंटर एक और उचित विकल्प है। (यह एमएसडीएन पर भी वर्णित है)

0

मैं विंडोज एपीआई के QueryPerformanceCounter और QueryPerformanceFrequency फ़ंक्शंस का उपयोग करूंगा। उदाहरणों के बीच "टिक" की संख्या प्राप्त करने के लिए ब्लॉक से पहले और बाद में पूर्व को दबाएं (वर्तमान − पुराना)। सेकेंड में अवधि प्राप्त करने के लिए बाद वाले फ़ंक्शन द्वारा प्राप्त मूल्य से इसे विभाजित करें।

2

GetTickCount()।

#include <windows.h> 
void MeasureIt() 
{ 
    DWORD dwStartTime = GetTickCount(); 
    DWORD dwElapsed; 

    DoSomethingThatYouWantToTime(); 

    dwElapsed = GetTickCount() - dwStartTime; 

    printf("It took %d.%3d seconds to complete\n", dwElapsed/1000, dwElapsed - dwElapsed/1000); 
} 
संबंधित मुद्दे