How to get the time elapsed in C in milliseconds? (Windows)

后端 未结 6 1774
栀梦
栀梦 2021-02-14 09:39

I\'ve searched in the Web but I\'ve only found a way for do it, but in this way it returns in seconds instead of milliseconds.

My code is:

#include 

        
相关标签:
6条回答
  • 2021-02-14 10:15

    This code piece works. This is based on the answer from Angus 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
    }
    
    0 讨论(0)
  • DWORD start = GetTickCount();
    executeSmth();
    printf("Elapsed: %i ms", GetTickCount() - start);
    

    P.S. This method has some limitations. See GetTickCount.

    0 讨论(0)
  • 2021-02-14 10:32

    A cross platform way is to use ftime.

    Windows specific link here: http://msdn.microsoft.com/en-us/library/aa297926(v=vs.60).aspx

    Example below.

    #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;
    }
    

    I ran the code above and traced through it using VS2008 and saw it actually calls the windows GetSystemTimeAsFileTime function.

    Anyway, ftime will give you milliseconds precision.

    0 讨论(0)
  • 2021-02-14 10:39

    The solution below seems OK to me. What do you think?

    #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;
    }
    

    Reference: http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.15.html#clock

    0 讨论(0)
  • 2021-02-14 10:39

    For Windows, GetSystemTime() is what you want. For POSIX, gettimeofday().

    0 讨论(0)
  • 2021-02-14 10:42

    GetSystemTime() uses the structure SYSTEMTIME, which provides milli-second resolution.

    More on this here.

    0 讨论(0)
提交回复
热议问题