clock()在C中返回负值

时间:2013-10-14 18:39:49

标签: c clock time.h time-t

我正在使用一个非常简单的代码来衡量执行时间。它运作良好,直到我不确定可能不超过20分钟。但是(> 20分钟后)它返回负面结果。我搜索在整个论坛中尝试了一切,比如更改数据类型,使用long unsigned(返回0)但又失败了。 以下是我的代码片段

main()
{
    time_t start,stop;
    double time_arm;
    start = clock(); 
    /* .......  */
    stop = clock();
    time_arm=(double)(stop-start)/(double)CLOCKS_PER_SEC;

    printf("Time Taken by ARM only is %lf \n",time_arm);
}

输出是 仅ARM采用的时间为 -2055.367296

提前感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

POSIX要求CLOCKS_PER_SEC为1,000,000。这意味着你的计数是微秒 - 而2 31 微秒约为35分钟。你的计时器只是溢出,所以当发生这种情况时你无法获得有意义的结果。

为什么你在20分钟看到问题,我不确定 - 也许你的CLOCKS_PER_SEC不兼容POSIX。无论如何,你的问题是计时器溢出。您需要以不同的方式处理此问题 - 也许请查看getrusage(2)

答案 1 :(得分:2)

clock_t很长,这是一个32位有符号值 - 它可以在溢出之前保持2 ^ 31。在32位系统上,CLOCKS_PER_SEC值等于1000000 [如POSIX所述] clock()几乎每72分钟后返回相同的值。

根据MSDN,它也可以返回-1。

  

自处理开始以来经过的挂钟时间(已过去   以秒为单位的时间CLOCKS_PER_SEC)。 如果经过的时间量   如果不可用,则函数返回-1 ,强制转换为clock_t。

旁注: -

clock()测量程序使用的CPU时间,它不测量实时,clock()返回值以微秒为单位。

答案 2 :(得分:0)

如果您使用的是POSIX系统,则可以尝试将clock_gettime()CLOCK_PROCESS_CPUTIME_ID选项一起使用。 clock_gettime()使用struct timespec来返回时间信息,因此不会遇到与使用单个整数相同的问题。