C Time.h 函数在 Precise 12.04 上不稳定

C Time.h 函数在 Precise 12.04 上不稳定

我正在运行 Ubuntu 12.04 并使用 gcc 编译器编译我的 C/C++ 程序。我想对一个函数进行基准测试。据我所知,在 POSIX 系统上有两个标准函数用于计算时间,并且都在 Ubuntu 上显示不稳定的结果:

获取时间clock_gettime

这是我的代码:

int main()
{
    float msec=0;
    //struct timespec start,end;
    struct timeval start,end;

    //clock_gettime(CLOCK_MONOTONIC_RAW,&start);
    //clock_gettime(CLOCK_REALTIME,&start);
    gettimeofday(&start,NULL);

        get_height(); //function i want to benchmark

/*  usleep(1000000);*/

    //clock_gettime(CLOCK_REALTIME,&end);
    gettimeofday(&end,NULL);

    //msec = (end.tv_sec-start.tv_sec)*1000 + (end.tv_nsec-start.tv_nsec)/(float)1000000;
    msec = (end.tv_sec-start.tv_sec)*1000 + (end.tv_usec-start.tv_usec)/(float)1000;
    printf("%0.2f ms.\n",msec); //41-44

}

问题是每次运行程序时显示的毫秒结果都不稳定/不同。一些示例读数为:38.16 毫秒。42.72 毫秒。35.70 毫秒。45.13 毫秒。

但是,当我使用 usleep() 函数进行测试时,结果显示 1000 毫秒。正确。知道我应该使用什么库/函数来准确计时我的函数吗?

编辑: 这进一步澄清了上述clock_gettime函数仅在Ubuntu 12.04上不准确。我在其他机器上测试过,结果显示准确。即使在Windows上,等效的query_performance_counter()函数也显示准确的结果。

相关内容