C ++ gettimeofday () возвращает то же значение

/*
* Returns time in s.usec
*/
float mtime()
{
struct timeval stime;
gettimeofday(&stime,0x0);
return (float)stime.tv_sec+((float)stime.tv_usec)/1000000000;
}

main(){
while(true){
cout<<setprecision(15)<<mtime()<<endl;
// shows the same time irregularly for some reason and can mess up triggers
usleep(500000);
}
}

Почему он показывает то же время нерегулярно? (составлено на Ubuntu 64bit и C ++)
Какие другие стандартные методы доступны для генерации метки времени Unix с точностью до миллисекунды?

0

Решение

float имеет от 6 до 9 десятичных знаков точности.

Так что, если целая часть, например, 1 391 432 494 (время UNIX, когда я пишу это; требуется 10 цифр), у вас уже нет цифр для дробной части. Не очень хорошо, и вот почему float терпит неудачу для этого.

Прыгать к двойной дает вам 15 цифр так что, кажется, этого достаточно, если можно предположить, что целочисленная часть является меткой времени UNIX, то есть секундами с 1970 года, поскольку это означает, что вряд ли в ближайшее время будет использоваться значительно больше цифр.

3

Другие решения

Кажется, float не имеет достаточной точности, заменен на double, и теперь все в порядке.

/*
* Returns time in s.usec
*/
double mtime()
{
struct timeval stime;
gettimeofday(&stime,0x0);
return (double)stime.tv_sec+((double)stime.tv_usec)/1000000000;
}

До сих пор точно не понимаю причину случайного поведения …
PS. Я захватывал mtime () и сравнивал его с текущим временем, чтобы получить длительность.

0

По вопросам рекламы [email protected]