时间测量中的负值?

时间:2015-05-03 15:44:31

标签: c linux time

我正在尝试以毫秒为单位测量时间:

#include <stdio.h>
#include <time.h>

int main(void)
{
    int i;
    struct timespec start, end;

    for (i = 0; i < 10; i++) {
            clock_gettime(CLOCK_MONOTONIC, &start);
            usleep(500000); // Sleep 500 milliseconds
            clock_gettime(CLOCK_MONOTONIC, &end);

            printf("Elapsed time: %lf \n", (((end.tv_sec - start.tv_sec) / 1.0e3) + ((end.tv_nsec - start.tv_nsec) / 1.0e6)));
    }

    return 0;
}

printf函数中,我减去秒并除以1000以将结果转换为毫秒,然后我减去纳秒秒并除以1000000以将结果转换为毫秒,最后添加两个结果

我认为这是正确的方法,但由于某种原因,输出包含负值:

Elapsed time: 500.117421 
Elapsed time: -499.882167 
Elapsed time: 500.193631 
Elapsed time: -499.884990 
Elapsed time: 500.115007 
Elapsed time: -499.877328 
Elapsed time: 500.127219 
Elapsed time: -499.875301 
Elapsed time: 500.124021 
Elapsed time: -499.865300 

我做错了什么?

1 个答案:

答案 0 :(得分:5)

要将秒数转换为毫秒数,您需要将秒数乘以1000。

所以这个

printf("Elapsed time: %lf \n",
  (((end.tv_sec - start.tv_sec) / 1.0e3) + ((end.tv_nsec - start.tv_nsec) / 1.0e6)));

应该是

printf("Elapsed time: %lf \n", 
  (((end.tv_sec - start.tv_sec) * 1.0e3) + ((end.tv_nsec - start.tv_nsec) / 1.0e6)));