Saltar al contenido

Tiempo en milisegundos en C

Te recomendamos que pruebes esta solución en un ambiente controlado antes de enviarlo a producción, saludos.

Solución:

Sí, es probable que este programa haya usado menos de una milésima de segundo. Intente usar una resolución de microsegundos con timeval.

p.ej:

#include 

struct timeval stop, start;
gettimeofday(&start, NULL);
//do stuff
gettimeofday(&stop, NULL);
printf("took %lu usn", (stop.tv_sec - start.tv_sec) * 1000000 + stop.tv_usec - start.tv_usec); 

A continuación, puede consultar la diferencia (en microsegundos) entre stop.tv_usec - start.tv_usec. Tenga en cuenta que esto solo funcionará para tiempos de subsegundos (como tv_usec hará un bucle). Para el caso general utilice una combinación de tv_sec y tv_usec.

Editar 2016-08-19

Un enfoque más apropiado en el sistema con clock_gettime el apoyo seria:

struct timespec start, end;
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
//do stuff
clock_gettime(CLOCK_MONOTONIC_RAW, &end);

uint64_t delta_us = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_nsec - start.tv_nsec) / 1000;

Este fragmento de código se puede utilizar para mostrar el tiempo en segundos, milisegundos y microsegundos:

#include 

struct timeval start, stop;
double secs = 0;

gettimeofday(&start, NULL);

// Do stuff  here

gettimeofday(&stop, NULL);
secs = (double)(stop.tv_usec - start.tv_usec) / 1000000 + (double)(stop.tv_sec - start.tv_sec);
printf("time taken %fn",secs);

Un par de cosas pueden afectar los resultados que está viendo:

  1. estas tratando clock_t como un tipo de punto flotante, no creo que lo sea.
  2. Usted podría estar esperando (1^4) para hacer algo más que calcular el XOR bit a bit de 1 y 4., es decir, es 5.
  3. Dado que el XOR es de constantes, es probable que el compilador lo doble, lo que significa que no agrega mucho trabajo en tiempo de ejecución.
  4. Dado que la salida está almacenada en búfer (solo está formateando el string y escribirlo en la memoria), se completa muy rápidamente.

No está especificando qué tan rápido es su máquina, pero no es descabellado que esto se ejecute muy rápido en hardware moderno, no.

Si lo tiene, intente agregar una llamada a sleep() entre las instantáneas de inicio/detención. Tenga en cuenta que sleep() es POSIX, sin embargo, no estándar C.

Si estás contento con lo expuesto, eres capaz de dejar un tutorial acerca de qué le añadirías a esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *