Как получить время, прошедшее в C в миллисекундах? (Windows)

Я искал в интернете, но я нашел только способ сделать это, но таким образом он возвращается в секундах вместо миллисекунд.

мой код:

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

5 ответов


кросс-платформенный способ-использовать ftime.

конкретная ссылка Windows здесь:http://msdn.microsoft.com/en-us/library/aa297926 (v=против 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 и увидел, что он фактически вызывает функцию Windows GetSystemTimeAsFileTime.

в любом случае, ftime даст вам точность миллисекунд.


Решение ниже кажется мне нормальным. А ты как думаешь?

#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


Для Windows, GetSystemTime() Это то, что вы хотите. Для POSIX, gettimeofday().


GetSystemTime() использует структуру SYSTEMTIME, который обеспечивает миллисекундное разрешение.

подробнее об этом здесь.


этот фрагмент кода работает. Это основано на ответе Ангуса Комбера:

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