#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: %fn", time );
return 0;
}
反复运行此代码生成的二进制文件,我倾向于获得相同的时间值:
$ ./a.out
time: 1348059520.000000
$ ./a.out
time: 1348059520.000000
$ ./a.out
time: 1348059520.000000
这种情况会一直持续到几秒钟后,此时我得到了更新的时间值。
看来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: %fn", time );
return 0;
}
为什么要使用浮点数?
#include <stdio.h>
#include <sys/time.h>
int main (void)
{
struct timeval tv;
gettimeofday (&tv, NULL);
printf ("time: %d.%06dn", (int)tv.tv_sec, (int)tv.tv_usec);
return 0;
}
./a.out
time: 1348067289.069908
它看起来很飘逸,但它很不舒服:-)由于微秒值在 0..999999 范围内,您需要做的就是将其零填充为 6 位数字。无需FP算术。