#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
直到几秒钟后我才得到更新的时间值。
答案 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算术。