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_core_mt_Runnable_hpp
10 #define anna_core_mt_Runnable_hpp
14 #include <anna/core/functions.hpp>
16 #include <anna/core/RuntimeException.hpp>
17 #include <anna/core/mt/Mutex.hpp>
24 Clase generica para implementar clases que deben realizar una unica accion concreta y que puede ser
25 lanzada desde un Thread.
27 class Runnable : public Mutex {
31 Devuelve el nombre logico de esta instancia.
32 @return El nombre logico de esta instancia.
34 const std::string& getId() const throw() { return a_id; }
37 Devuelve el valor del indicador de parada.
38 \return el valor del indicador de parada.
39 \warning La implementacion particular del metodo run deberia comprobar este valor
42 bool hasRequestedStop() const throw() { return a_requestedStop == true; }
45 Devuelve \em true si la instancia esta en ejecucion dentro de su propio thread o \em false en otro caso.
46 \return \em true si la instancia esta en ejecucion dentro de su propio thread o \em false en otro caso.
48 bool isRunning() const throw() { return a_isRunning; }
51 Solicita la parada de esta instancia.
53 void requestStop() throw(RuntimeException);
56 Devuelve una cadena con la informacion relevante de este objeto.
57 \return Una cadena con la informacion relevante de este objeto.
59 virtual std::string asString() const
61 std::string result("anna::Runnable { Id: ");
63 result += functions::asText(" | Running: ", a_isRunning);
64 result += functions::asText(" | RequestedStop: ", a_requestedStop);
65 return result += " }";
72 Runnable() : a_id("<none>"), a_requestedStop(false), a_isRunning(false) {;}
76 @param id Nombre logico de esta instancia.
78 Runnable(const std::string& id) : a_id(id), a_requestedStop(false), a_isRunning(false) {;}
82 @param id Nombre logico de esta clase.
84 Runnable(const char* id) : a_id(id), a_requestedStop(false), a_isRunning(false) {;}
87 Establece el nombre logico de esta instancia.
88 \param id Nuevo nombre logico de esta instancia.
90 void setId(const std::string& id) throw() { a_id = id; }
93 Establece el indicador que informa sobre si esta instancia esta en ejecucion o no.
94 \param isRunning Indicador que informa sobre si esta instancia esta en ejecucion.
95 \warning Uso interno. Se invoca automaticamente desde Thread.
97 void setIsRunning(const bool isRunning) throw() { a_isRunning = isRunning; }
100 Metodo que se debe reescribir para inicializar el contenido de la clase justo antes de comenzar
103 virtual void initialize() throw(RuntimeException) {;}
106 Metodo que debe reescribir para realizar la accion concreta. Por defecto invocara do_action mientras
107 que no se invoque la metodo requestStop de la instancia.
109 virtual void run() throw(RuntimeException);
112 Metodo que se debe reescribir para finalizar la ejecucion de esta instancia.
113 \warning La re-implementacion de este metodo siempre debera invocar a la implementacion
114 original que esta re-escribiiendo.
116 virtual void terminate() throw() { a_requestedStop = false; }
119 Metodo indicado por Runnable::run en tanto en cuanto no se invoque a requestStop.
121 virtual void do_action() throw(RuntimeException) = 0;
125 bool a_requestedStop;
131 #define anna_complete_runnable(Class) void do_action () throw () {;}