X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/6e0194f46ac77c18bfeabf84ef94a32f23e41073..ffe5447aa2d71b5296cbdd36c48d5f9d59e249af:/Server/include/plaqui/server/runnable.h?ds=sidebyside diff --git a/Server/include/plaqui/server/runnable.h b/Server/include/plaqui/server/runnable.h index 39a221f..7896090 100644 --- a/Server/include/plaqui/server/runnable.h +++ b/Server/include/plaqui/server/runnable.h @@ -29,16 +29,52 @@ #define PLAQUI_RUNNABLE_H #include +#include -namespace Plaqui { +namespace PlaQui { + +namespace Server { /// ealizauna tarea (generalmente en un thread). class Runnable { + // Tipos. + + public: + + /// Tipo de señal para indicar que se finalizó la tarea. + typedef SigC::Signal0 SignalFinished; + + // Atributos. + private: - // Thread en el cual correr la tarea. + + /// Thread en el cual correr la tarea. Glib::Thread* thread; + /// Señal que indica que se finalizó la tarea. + SignalFinished finished; + + protected: + + /** + * Indica si se debe frinalizar la tarea. + * + * \todo Poner como privado y poner get() set() con locks. + */ + bool stop; + + // Métodos. + + private: + + /** + * Corre la tarea controlando cuando termina. + * + * \param runner Objeto con la tarea a realizar. + */ + static void static_run(Runnable* runner); + protected: /// Realiza la terea. @@ -49,7 +85,7 @@ namespace Plaqui { /** * Destructor. */ - virtual ~Runnable(void) {} + virtual ~Runnable(void); /** * Constructor. @@ -57,15 +93,35 @@ namespace Plaqui { Runnable(void); /** - * Comienza la tares. + * Comienza la tarea. * * \param detach Si es true se corre en un thread propio. Si no no * retorna hasta que finaliza. */ virtual void run(bool detach = true); + /** + * Finaliza la tarea. + * + * \param attach Si es true, la función no retorna hasta que no + * finalice la tearea (no recomendable). + * + * \note Para saber cuando la tarea fue finalizada puede utilizar + * la señal signal_finished(). + */ + virtual void finish(bool attach = false); + + /** + * Obtiene la señal que avisa cuando la tarea es finalizada. + * + * \see finish(). + */ + SignalFinished& signal_finished(void); + }; } +} + #endif // PLAQUI_RUNNABLE_H