12

我在网上搜索过,但我只找到了一种方法,但这样它会以秒而不是毫秒返回。

我的代码是:

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

6 回答 6

35

一种跨平台的方式是使用 ftime。

Windows 特定链接: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 对其进行了跟踪,发现它实际上调用了 windows GetSystemTimeAsFileTime 函数。

无论如何, ftime 会给你毫秒精度。

于 2013-06-22T16:36:32.770 回答
13

下面的解决方案对我来说似乎没问题。你怎么看?

#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

于 2014-05-15T13:48:23.937 回答
2

对于 Windows,GetSystemTime()这就是您想要的。对于 POSIX gettimeofday(),.

于 2013-06-22T13:00:23.727 回答
1

GetSystemTime()使用SYSTEMTIME提供毫秒分辨率的结构。

更多关于这个here

于 2013-06-22T12:58:00.380 回答
1

这段代码有效。这是基于 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
}
于 2017-06-18T15:10:51.717 回答
0
DWORD start = GetTickCount();
executeSmth();
printf("Elapsed: %i ms", GetTickCount() - start);

PS这种方法有一些局限性。请参阅GetTickCount

于 2020-08-17T14:57:15.400 回答