Tengo una biblioteca experimental cuyo rendimiento estoy tratando de medir. Para ello, he escrito lo siguiente:¿Por qué los intervalos gettimeofday() ocasionalmente son negativos?
struct timeval begin;
gettimeofday(&begin, NULL);
{
// Experiment!
}
struct timeval end;
gettimeofday(&end, NULL);
// Print the time it took!
std::cout << "Time: " << 100000 * (end.tv_sec - begin.tv_sec) + (end.tv_usec - begin.tv_usec) << std::endl;
De vez en cuando, mis resultados son los tiempos negativos, algunos de los cuales no tienen sentido. Por ejemplo:
Time: 226762
Time: 220222
Time: 210883
Time: -688976
¿Qué está pasando?
obtienes negativos porque timeval es una estructura de componentes múltiples. en resumen, formado por segundos y segundos. si ingenuamente difieres los componentes comunes en la segunda televisión por la primera televisión, obtendrás negativos. por ejemplo, considere tv1 como 1sec 3usec de epoch y tv2 como 4sec y 1usec de epoch.como puede ver, ahora obtiene un valor negativo en la diferencia entre los componentes de usec. –
Tiene 4 respuestas a esta pregunta, ninguna de ellas estuvo cerca de proporcionar una respuesta correcta, pero igual seleccionó la más irrelevante como respuesta final. –
Además interesante, pero solo relevante cuando se usa solo uno de los componentes, como lo estaba haciendo (solo usando los componentes tv_usec, no los de tv_sec). – egpbos