使用clock_gettime获取负值

时间:2013-07-17 16:54:03

标签: c time clock

在以下程序中,我尝试测量作业的执行时间(for循环)。大部分时间它工作正常,但有时,它返回负值!我的第一个猜测是变量可能会溢出。任何人都可以告诉我,不管我是对吗?我该如何解决这个问题呢?

由于

int main(int argc, char **argv) 
{
long int ST;
long int ET;
struct timespec gettime_now;
clock_gettime(CLOCK_REALTIME, &gettime_now);
ST= gettime_now.tv_nsec;
for (i=0; i < 1000; i++)
  a[i]=b[i];
clock_gettime(CLOCK_REALTIME, &gettime_now);
ET= gettime_now.tv_nsec;
printf("Time diff: %ld\n", ET-ST);
}

1 个答案:

答案 0 :(得分:10)

在这两种情况下,您忽略了tv_sec struct timespec只使用了纳米秒,这是不正确的STEV的tv_nsec可能有所不同第二的。

来自man

tv_sec - 表示自纪元以来的秒数

tv_nsec - 当前秒,纳秒精度(1/1000000000秒)

最好编写自己的函数来找到差异。示例代码(未测试),

timespec diff(timespec start, timespec end)
{
    timespec temp;

    if ((end.tv_nsec-start.tv_nsec)<0
    {
            temp.tv_sec = end.tv_sec-start.tv_sec-1;
            temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
    }
    else 
    {
            temp.tv_sec = end.tv_sec-start.tv_sec;
            temp.tv_nsec = end.tv_nsec-start.tv_nsec;
    }
    return temp;
}

请参阅this了解实际的diff功能和示例。