/*
* 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 с точностью до миллисекунды?
float
имеет от 6 до 9 десятичных знаков точности.
Так что, если целая часть, например, 1 391 432 494 (время UNIX, когда я пишу это; требуется 10 цифр), у вас уже нет цифр для дробной части. Не очень хорошо, и вот почему float
терпит неудачу для этого.
Прыгать к двойной дает вам 15 цифр так что, кажется, этого достаточно, если можно предположить, что целочисленная часть является меткой времени UNIX, то есть секундами с 1970 года, поскольку это означает, что вряд ли в ближайшее время будет использоваться значительно больше цифр.
Кажется, 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 () и сравнивал его с текущим временем, чтобы получить длительность.