usar tiempo programa poner nanosegundos milisegundos medir medidor ejecucion contador como calcular c

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?



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.