poner - C: utilizando clock() para medir el tiempo en programas de subprocesos mĂșltiples
tiempo de ejecucion en milisegundos c++ (2)
Siempre he usado clock () para medir cuánto tiempo tomó mi aplicación de principio a fin, como;
int main(int argc, char *argv[]) {
const clock_t START = clock();
// ...
const double T_ELAPSED = (double)(clock() - START) / CLOCKS_PER_SEC;
}
Desde que comencé a usar los hilos POSIX esto parece fallar. Parece que clock () aumenta N veces más rápido con N subprocesos. Como no sé cuántos subprocesos se ejecutarán simultáneamente, este enfoque falla. Entonces, ¿cómo puedo medir cuánto tiempo ha pasado?
¿Qué resolución de tiempo necesitas? Puede usar time () desde time.h para una segunda resolución. Si necesita una resolución más alta, puede usar algo más específico del sistema. Ver la función del temporizador para proporcionar tiempo en nano segundos usando C ++
clock()
mida el tiempo de CPU utilizado por su proceso, no el tiempo del reloj de pared. Cuando tiene varios subprocesos ejecutándose simultáneamente, obviamente puede grabar el tiempo de CPU mucho más rápido.
Si quiere saber el tiempo de ejecución del reloj de pared, necesita usar una función apropiada. El único en ANSI C es time()
, que generalmente solo tiene una resolución de 1 segundo.
Sin embargo, como dijiste que estás usando POSIX, eso significa que puedes usar clock_gettime()
, definido en time.h
El reloj CLOCK_MONOTONIC
en particular es el mejor para usar para esto:
struct timespec start, finish;
double elapsed;
clock_gettime(CLOCK_MONOTONIC, &start);
/* ... */
clock_gettime(CLOCK_MONOTONIC, &finish);
elapsed = (finish.tv_sec - start.tv_sec);
elapsed += (finish.tv_nsec - start.tv_nsec) / 1000000000.0;
(Tenga en cuenta que he hecho el cálculo del tiempo elapsed
cuidado para asegurar que la precisión no se pierda al cronometrar intervalos muy cortos).
Si su sistema operativo no proporciona CLOCK_MONOTONIC
(que puede verificar en tiempo de ejecución con sysconf(_SC_MONOTONIC_CLOCK)
), puede usar CLOCK_REALTIME
como una alternativa, pero tenga en cuenta que este último tiene la desventaja de que generará resultados incorrectos si la hora del sistema es cambiado mientras tu proceso se está ejecutando.