2013-06-22 4 views
6

मैंने वेब पर खोज की है लेकिन मुझे केवल ऐसा करने का एक तरीका मिला है, लेकिन इस तरह यह मिलीसेकंड के बजाय सेकंड में लौटता है।सी में मिलीसेकंड में समय बीतने के लिए कैसे? (विंडोज़)

मेरे कोड है:

#include <stdio.h> 
#include <assert.h> 
#include <time.h> 

int main(void) 
{ 
    int solucion; 

    time_t start, stop; 
    clock_t ticks; 
    long count; 

    time(&start); 
    solucion = divisores_it(92000000, 2); 
    time(&stop); 

    printf("Finnished in %f seconds. \n", difftime(stop, start)); 
    return 0; 
} 

उत्तर

20

एक क्रॉस प्लेटफ़ॉर्म तरीका ftime का उपयोग करना है।

विंडोज विशिष्ट यहाँ लिंक: नीचे http://msdn.microsoft.com/en-us/library/aa297926(v=vs.60).aspx

उदाहरण।

#include <stdio.h> 
#include <sys\timeb.h> 

int main()  
{ 
    struct timeb start, end; 
    int diff; 
    int i = 0; 
    ftime(&start); 

    while(i++ < 999) { 
     /* do something which takes some time */ 
     printf(".");  
    } 

    ftime(&end); 
    diff = (int) (1000.0 * (end.time - start.time) 
     + (end.millitm - start.millitm)); 

    printf("\nOperation took %u milliseconds\n", diff); 
    return 0; 
} 

मैं ऊपर कोड भाग गया और यह माध्यम से पता लगाया VS2008 का उपयोग कर और देखा कि यह वास्तव में खिड़कियों GetSystemTimeAsFileTime समारोह कहता है।

वैसे भी, ftime आपको मिलीसेकंड सटीक देगा।

+0

() अप्रचलित है। संभवतः एक बेहतर क्रॉस-प्लेटफ़ॉर्म समाधान ['std :: chrono'] (http://en.cppreference.com/w/cpp/chrono) लाइब्रेरी का उपयोग करना होगा। – erobertc

+4

@erobertc OP को 'सी' के लिए समाधान की आवश्यकता है और 'C++' नहीं। आपके सुझाव के लिए 'सी ++' की आवश्यकता है। – rbaleksandar

1

GetSystemTime() संरचना SYSTEMTIME, मिली-सेकंड संकल्प प्रदान करता है जो उपयोग करता है।

More on this here

1

विंडोज के लिए, GetSystemTime() वह है जो आप चाहते हैं। POSIX के लिए, gettimeofday()

9

नीचे दिया गया समाधान मेरे लिए ठीक लगता है। तुम क्या सोचते हो?

#include <stdio.h> 
#include <time.h> 

long timediff(clock_t t1, clock_t t2) { 
    long elapsed; 
    elapsed = ((double)t2 - t1)/CLOCKS_PER_SEC * 1000; 
    return elapsed; 
} 

int main(void) { 
    clock_t t1, t2; 
    int i; 
    float x = 2.7182; 
    long elapsed; 

    t1 = clock(); 
    for (i=0; i < 1000000; i++) { 
      x = x * 3.1415; 
    } 
    t2 = clock(); 

    elapsed = timediff(t1, t2); 
    printf("elapsed: %ld ms\n", elapsed); 


    return 0; 
} 

संदर्भ: http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.15.html#clock

+0

आप इस लाइन में 'timediff' का उपयोग नहीं कर सकते: 'elapsed = timediff (t1, t2);' जब तक कि सही हेडर फ़ाइल को परिभाषित न किया जाए। बस 't2-t1' ठीक काम करेगा। – inckka

+1

@inckka, 'timediff()' को उपरोक्त 'मुख्य() 'से ऊपर परिभाषित किया गया है। कोई हेडर फ़ाइल की आवश्यकता नहीं है। और 't2-t1' आपको मिलीसेकंड में जवाब नहीं देगा। – mcrisc

+0

आप सही हैं। लापरवाह गलतफहमी के लिए खेद है। – inckka

0

इस कोड टुकड़ा काम करता है। यह एंगस Comber से जवाब पर आधारित है:

#include <sys/timeb.h> 

uint64_t system_current_time_millis() 
{ 
#if defined(_WIN32) || defined(_WIN64) 
    struct _timeb timebuffer; 
    _ftime(&timebuffer); 
    return (uint64_t)(((timebuffer.time * 1000) + timebuffer.millitm)); 
#else 
    struct timeb timebuffer; 
    ftime(&timebuffer); 
    return (uint64_t)(((timebuffer.time * 1000) + timebuffer.millitm)); 
#endif 
} 
http://man7.org/linux/man-pages/man3/ftime.3.html, ftime के अनुसार
संबंधित मुद्दे