我正在尝试以毫秒为单位测量时间:
#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
我做错了什么?
答案 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)));