Medir tiempo de ejecución en C++

Habitualmente una de las cosas que nos interesa medir cuando programamos código, es el tiempo de ejecución. Identificar las secciones de código que más impactan en el tiempo de ejecución total, nos permite optimizar el código y disminuir el tiempo de ejecución general de todo nuestro código.

chronometre

En C++ hay varias formas de hacerlo, pero dependiendo de cómo lo implementemos y qué cabeceras usemos, podemos encontrarnos que al compilar nuestro código en ciertos sistemas no nos funcione. El siguiente ejemplo muestra cómo medir tiempos en una sección de código utilizando cabeceras estándar de C++:

#include <iostream>
#include <ctime> 

unsigned t0, t1;

t0=clock()
// Code to execute
t1 = clock();

double time = (double(t1-t0)/CLOCKS_PER_SEC);
cout << "Execution Time: " << time << endl;

La función "clock" retorna el tiempo consumido por el programa medido en ticks,  que junto con la macro "CLOCKS_PER_SEC" nos permite traducir los ticks a segundos.

El código también se encuentra disponible en:

execution_time.cpp





39299 Visitas Totales 7 Visitas para Hoy

26 response on “Medir tiempo de ejecución en C++

    • Me alegro! Gracias por tu comentario.

      Aunque como ya habrás notado, no tengo publicidad como tal en la que se cobre por clicks o visualizaciones, pero gracias igualmente 😉

  1. Hola, he utilizado esta función sin embargo me arroja como resultado el tiempo pero de forma hexadecimal creo, sabes a que se pueda deber esto, es decir no me arroja por ejemplo 0.000001542 me arroja 0.e32 etc etc. Agradeceria si alguien me respondiera, gracias de antemano

    • Lo primero creo que te falta algún número entre el . y la e en 0.e32

      Por otro lado, ese formato es normal y se llama notación científica que se representa de la forma mantisa x base^exp. Si operas el número tendrás el número decimal que buscas.

      La razón de que esto sea así es por la “representabilidad” de valores demasiado grandes o demasiado pequeños que acomoda dichos valores para ser escritos de manera convencional, legible y precisa gracias a la notación científica.

      En el caso particular de la programación la base es siempre 10. Es decir, si tu número, el cual como te he dicho creo que le falta algún número, quedaría por ejemplo 1.36e^32 como 1,36 × 10^32 en base 10 y quitándole la base le tendrías que añadir 32 ceros a 1,36. Representación que ya se vuelve difícil de leer, complicada de escribir por su longitud y seguramente acabarías redondeando para evitarlo perdiendo precisión.

      Espero que la respuesta te haya servido y te ayude a entender los valores que estás obteniendo.

  2. como poder hacer un temporizador para una prueba digital en c++? La prueba tiene que durar 15 minutos maxìmo si pasan de los 15 minutos la prueba tiene que parar y mostrar el resultado del usuario

    • Lo más sencillo es al inicio registrar el tiempo y meter comprobaciones de tiempo en las iteraciones de tu prueba. Cuando el tiempo que haya transcurrido sean tus 15 minutos termina la ejecución y muestra el resultado.

      Sin saber más tampoco puedo decirte mucho más...

      • Esta es la estructura de mi programa pero no se como programar un temporizador que sea de 15 minutos. Terminando los 15 minutos se termine la prueba y que muestre el resultado de la prueba

        #include
        #include

        using namespace std;

        int main ()
        {
        int puntaje;
        int r1;
        string r;

        puntaje = 0;
        cout << "Instrucciones para la prueba de inteligencia:" << endl;
        cout << "Esta es una prueba para ver como piensa. Contiene preguntas de diferentes clases." << endl << "Despues de cada pregunta hay de tres a cinco respuestas posibles o un espacio donde puede ingresar la respuesta directamente." << endl << "Lea cuidadosamente cada pregunta y decida cual de las respuestas es la mejor." << endl << "Como es una prueba donde se mide el tiempo, no le conviene emplear mucho tiempo en una sola pregunta" << endl;
        cout << endl;
        cout << "Se le concederan 15 minutos a partir del momento en que el examinador le indique que empiece." << endl;
        cout << endl;
        cout << "Cuestionario de 30 preguntas: " << endl << endl;

        cout << "1. Lo opuesto de odio es:" << endl;
        cout << "a) enemigo"<< endl;
        cout << "b) temor" << endl;
        cout << "c) amor" << endl;
        cout << "d) amigo" << endl;
        cout << "e) alegria" <> r;
        if (r == "c")
        {
        puntaje = puntaje + 1;
        }
        cout < 20)
        {
        cout <= 14)
        {
        cout <= 8)
        {
        cout <= 5)
        {
        cout << "Inferior al termino medio";
        }
        else
        if (puntaje < 5)
        {
        cout << "Bajo o inferior";
        }
        cout << endl << endl;

        system("pause");
        return 0;
        }

        • ¿Puedes subirlo a algún repositorio tipo GitHub desde donde trabajar con ello correctamente?

          Veo varias cosas raras, se pierde la identación del código y creo que te ha podido hacer algún remplazo al copy-pegarlo...

          De todas formas, ¿ese código está completo y te funciona? Lo digo porque tienes includes que no incluyen nada, variables que no veo que uses pero declaras, creo que esto "<> r" querías poner un escape de retorno, no veo cin para recoger la respuesta...

  3. luciely sarai pool matus

    ¿Alguien sabe cómo programar una máquina de llenado de agua con tiempo de llenado, por ejemplo 10 litros en 10 segundos?

    • La modificación que buscas para guardar en un fichero sería algo así:


      #include <fstream>

      std::ofstream ofs ("execution_time_log.txt", std::ofstream::out);

      ofs << "Execution Time: " << time << endl;ofs.close();

  4. Muchas gracias por tu aporte!

    Si ves este comentario me gustaria hacerte una pregunta, como puedo hacer que el tiempo me de el valor exacto? por ejemplo si me da 5.034 segundos, como hago para que eso se transforme a 5?

    Un saludo!

  5. Muchas gracias por el aporte!....

    Quisiera saber como se puede ver el tiempo en una unidad mas pequeña, milisegundos o microsegundos... muchas gracias

  6. alguien sabe como es el código para saber la cantidad de movimientos que se realizo en un juego
    así como el tiempo que se
    tardó en resolver todo el juego, y guardar en un vector los records junto con los tiempos y el número de
    movimientos realizados?

  7. programar en lenguaje C el tiempo en ciclos del reloj al ejecutar cualquier programa en cualquier lenjuague y abrir los ciclos de reloj al abrir Word

  8. hay un error, falta un ;
    #include
    #include

    unsigned t0, t1;

    t0=clock(); //Acá falta ese ; XD
    // Code to execute
    t1 = clock();

    double time = (double(t1-t0)/CLOCKS_PER_SEC);
    cout << "Execution Time: " << time << endl;

Deja un comentario