来自gettimeofday的时间没有按预期更新

时间:2012-09-19 13:04:50

标签: c gettimeofday

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

int main()
{
   float time;
   struct timeval tv;
   gettimeofday( &tv, NULL );
   time = tv.tv_sec + ( tv.tv_usec / 1000000.0 );
   printf( "time: %f\n", time );
   return 0;
}

重复运行此代码生成的二进制文件,我倾向于获得相同的时间值:

$ ./a.out
time: 1348059520.000000
$ ./a.out
time: 1348059520.000000
$ ./a.out
time: 1348059520.000000

直到几秒钟后我才得到更新的时间值。

2 个答案:

答案 0 :(得分:3)

float似乎太小而无法包含tv.tv_sec + ( tv.tv_usec / 1000000.0 )的结果。请改用double

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

int main()
{
   double time;
   struct timeval tv;
   gettimeofday( &tv, NULL );
   time = tv.tv_sec + ( tv.tv_usec / 1000000.0 );
   printf( "time: %f\n", time );
   return 0;
}

答案 1 :(得分:2)

为什么要使用浮点?

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

int main (void)
{
   struct timeval tv;
   gettimeofday (&tv, NULL);
   printf ("time: %d.%06d\n", (int)tv.tv_sec, (int)tv.tv_usec);
   return 0;
}

./a.out
time: 1348067289.069908

看起来是浮动的,但它是 inty :-)由于微秒值在0..999999范围内,所以你需要做的就是将其填充为零6位数。不需要FP算术。