1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_timex_MicroMeter_hpp
10 #define anna_timex_MicroMeter_hpp
12 #include <anna/core/functions.hpp>
19 Facilita la medicion de los tiempos empleados las distintas partes de nuestra aplicacion.
21 Permite calcular tiempos acumulados como tiempos individuales. Por ejemplo:
25 #include <anna.timex.MicroMeter.h>
28 timex::MicroMeter meter;
31 Microsecond gooTime = meter.getDelay ();
34 Microsecond goohooTime = meter.setControlPoint ();
37 Microsecond jooTime = meter.getDelay ();
45 Inicializa la cuenta de temporizacion.
47 MicroMeter() { a_timestamp = functions::microsecond(); a_topReference = (Microsecond)0; }
51 * Copia la cuenta de utilizacion de la instancia recibida como parametro.
52 * \param other Instancia de la copiar los parametros para calcular el tiempo transcurrido.
54 MicroMeter(const MicroMeter& other) : a_timestamp(other.a_timestamp) { a_topReference = (Microsecond)0; ;}
57 * Inicializa la cuenta de temporizacion. Este metodo es invocado automaticamente desde el contructor la clase
58 * por lo que si vamos usar esta instancia para tomar un unica medida no es necesario invocarlo.
59 * \warning Elimina el punto de referencia temporal que puediera haberse establecido con #setTopReference.
60 * \return El número de milisegundos transcurridos desde la última vez que inicializamos la cuenta de temporizacion.
62 Microsecond setControlPoint() throw() {
63 Microsecond now = functions::microsecond();
64 Microsecond result = (now > a_timestamp) ? (now - a_timestamp) : (Microsecond)0;
71 * Se da la posiblidad de establecer un punto de referencia temporal de forma
72 * que cuando se invoque a MicroMeter::getDelay, el calculo de la diferencia de tiempo
73 * no se hará entre la marca de tiempo y el tiempo actual, sino la marca de
74 * tiempo y ésta marca de referencia.
76 * Esta funcionalidad ha sido requerida para medir el tiempo de ejecución "real"
77 * de tareas que se ejecutan dentro de un thread. Ya que puede pasar un tiempo
78 * indeterminado desde que se termina la tarea MT (momento en el que se establecerá
79 * la marca de tiempo) y el núcleo y demás partes pueden tener conocimiento de que
80 * esa tarea ha sido finalidad.
82 void setTopReference(const Microsecond & topReference) throw() { a_topReference = topReference; }
85 * Elimina el punto de referencia temporal.
87 void clearTopReference() throw() { a_topReference = (Microsecond)0; }
90 * Devuelve el número de milisegundos transcurridos desde la última vez que inicializamos la cuenta de temporización.
91 * Si se ha establecido un punto de referencia mediante #setTopReference, devolverá la diferencia entre el
92 * el punto de control y la referencia, en otro caso, devolverá la diferencia entre el punto de control y el
94 * \return El número de milisegundos transcurridos desde la última vez que inicializamos la cuenta de temporizacion.
95 * \warning Si detecta algun fallo devolvera 0.
97 Microsecond getDelay() const throw() {
98 Microsecond now = (a_topReference == 0) ? functions::microsecond() : a_topReference;
99 return (now > a_timestamp) ? (now - a_timestamp) : (Microsecond)0;
104 * \param timestamp Milisegundo en el que inicilizar la cuenta de esta instancia.
105 * \warning Elimina el punto de referencia temporal que puediera haberse establecido con #setTopReference.
106 * \see anna::functions::microsecond.
108 MicroMeter& operator= (const Microsecond & timestamp) throw() { a_timestamp = timestamp; a_topReference = (Microsecond)0; return *this; }
112 * \param other Instancia de la que copiar.
114 MicroMeter& operator= (const MicroMeter& other) throw() { a_timestamp = other.a_timestamp; a_topReference = other.a_topReference; return *this; }
117 Microsecond a_topReference;
118 Microsecond a_timestamp;