¿Cuál es la mejor manera de calcular una diferencia de tiempo en C ++? Estoy cronometrando la velocidad de ejecución de un programa, así que estoy interesado en milisegundos. Mejor aún, segundos milisegundos ...
La respuesta aceptada funciona, pero debe incluir ctime o time.h como se indica en los comentarios.
Respuestas:
Ver
std::clock()
función.Si desea calcular el tiempo de ejecución para sí mismo (no para el usuario), es mejor hacerlo en tics de reloj (no en segundos).
EDITAR:
archivos de encabezado responsables -
<ctime>
o<time.h>
fuente
clock()
devuelve el tiempo de CPU consumido por el programa. Entonces, si el programa se ejecuta en paralelo, el tiempo devuelto por la función sería el acumulado del tiempo empleado en todas las CPU, en lugar del tiempo transcurrido cplusplus.com/reference/ctime/clocksi está usando c ++ 11, aquí hay un contenedor simple (vea esta esencia ):
O para c ++ 03 en * nix:
Ejemplo de uso:
fuente
Timer()
y la llamada aelapsed()
if!std::chrono::high_resolution_clock::is_steady
, ¡que es el caso en Linux!Consideraría seriamente el uso de Boost, particularmente boost :: posix_time :: ptime y boost :: posix_time :: time_duration (en http://www.boost.org/doc/libs/1_38_0/doc/html/date_time/posix_time .html ).
Es multiplataforma, fácil de usar y, en mi experiencia, proporciona el nivel más alto de resolución de tiempo que proporciona un sistema operativo. Posiblemente también muy importante; proporciona algunos operadores de E / S muy agradables.
Para usarlo para calcular la diferencia en la ejecución del programa (a microsegundos; probablemente exagerado), se vería así [escrito en el navegador, no probado]:
fuente
Agregué esta respuesta para aclarar que la respuesta aceptada muestra el tiempo de CPU que puede no ser el tiempo que desea. Porque según la referencia , hay tiempo de CPU y tiempo de reloj de pared . El tiempo del reloj de pared es el tiempo que muestra el tiempo real transcurrido independientemente de cualquier otra condición, como la CPU compartida por otros procesos. Por ejemplo, utilicé varios procesadores para hacer una determinada tarea y el tiempo de la CPU fue de 18 segundos, donde en realidad tomó 2 segundos. en el tiempo real del reloj de pared.
Para obtener el tiempo real que lo hace,
fuente
boost 1.46.0 y versiones posteriores incluyen la biblioteca Chrono :
fuente
std::chrono
espacio de nombres con casi el mismo contenido.En Windows: use GetTickCount
fuente
También puede utilizar clock_gettime . Este método se puede utilizar para medir:
El código es el siguiente:
'
fuente
en caso de que esté en Unix, puede usar
time
para obtener el tiempo de ejecución:fuente
Solo una nota al margen: si está ejecutando Windows y realmente necesita precisión, puede usar QueryPerformanceCounter . Te da tiempo en (potencialmente) nano segundos.
fuente
Para mí, la forma más sencilla es:
usando este fragmento de código no tienes que hacer el clásico
end - start
.Disfrute de su enfoque favorito.
fuente
Obtenga el tiempo del sistema en milisegundos al principio, y nuevamente al final, y reste.
Para obtener el número de milisegundos desde 1970 en POSIX, escribiría:
Para obtener la cantidad de milisegundos desde 1601 en Windows, escribiría:
Si quisiera normalizar la respuesta de Windows para que también devolviera el número de milisegundos desde 1970, entonces tendría que ajustar su respuesta en 11644473600000 milisegundos. Pero eso no es necesario si lo único que le importa es el tiempo transcurrido.
fuente
Si está usando:
Entonces necesitará lo siguiente para obtener el tiempo en segundos:
fuente
Esto parece funcionar bien para intel Mac 10.7:
fuente