Controlar el tiempo de ejecución de un programa con C++

Seguramente alguna vez has tenido que medir el tiempo de ejecución de tu programa en C++ o suspender un hilo de ejecución con bastante precisión. Pues bien, para ayudar un poco con ese tema he creado una clase de muy fácil uso que te da una precisión de hasta nanosegundos.

En principio no la he comentado ni nada :3  creo que se entiende de sobra si sabes que hacen el par de funciones  clock_gettime y nanosleep.

Para que veáis como funciona os dejo un programa con algunos de ejemplos.

¡Acordaros de compilar con -lrt que si no falla!
El ejemplo anterior se compila de la siguiente manera suponiendo el fichero se llama cronoPrueba.cc
g++ -Wall Crono.hpp cronoPrueba.cc -o pruebaCrono.bin -lrt

Los enlaces con los que aprendí el uso de la funciones para medir el tiempo y suspender hilos:

Cualquier duda o sugerencia la comentáis ;)

2 pensamientos en “Controlar el tiempo de ejecución de un programa con C++

  1. Me parece interesante todo esto, pero como aún estoy iniciándome en C++, creo que no es muy conveniente que use esta función.
    Es decir, quizás usted pueda recomendarme alguna función más sencilla, y alguna que no requiera alguna compilación especial, porque yo sólo uso Code::Blocks o a veces VS pero allí sólo sé usar la opción de compilar y ejecutar que se realizan de una sola pulsada jeje.
    Bueno, a nivel de consola estuve haciendo un pequeño juego (muy muy simple), y hay una parte en que quisiera darle “2 segundos” al usuario para que presione una tecla. Si no lo hace, pierde descalificado. Es como para restarle el tiempo que tiene para pensar, y si prefiere tardarse más para hacerlo mejor, podría terminar perdiéndolo todo.
    Sólo he llegado hasta reemplazar el cin por el getche() de la librería conio.h en que se toman los caracteres inmediatamente cuando son presionados. Es decir, no requiere que se presione enter.
    Los caracteres se toman individualmente, que es justamente lo que necesito, pero… no puedo llevar un control del tiempo.
    Con Sleep de windows.h sólo domiría el proceso …
    Gracias de antemano. Espero pueda ayudarme.

    • Hola Juan.
      Veo que usas windows para programar así que te animo a que pruebes algún sistema gnu/linux, por lo menos a mi me resulta mas cómodo para estas tareas. No es que sea fanático del software libre XD yo soy el primero que usa windows también. Cada sistema operativo tienes sus ventajas.
      Bueno al grano :D
      Tienes varias opciones usando windows:
      Si quieres hacer un videojuego te recomiendo que uses alguna librería o framework como Allegro -> http://alleg.sourceforge.net/ para c y c++ o XNA para C# que son bastante fáciles de empezar con ellas y resuelven este tipo de problemas con facilidad.
      También puedes instalarte Cygwin y toquetear en las opciones del Code::blocks pero para eso mejor usar un sistema gnu/linux XD
      Y la solución mas simple es usar la función GetTickCount() que está definida en windows.h y te da los milisegundos, con eso ya tienes control absoluto del del tiempo :D.

      Si usas GetTickCount() combínalo con llamadas a Sleep() con pocos milisegundos (1000/FPS-tiempoGastado) para que el proceso no use el 100% de CPU.
      Espero haber resuelto tu duda.

Deja un comentario