Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

CSignalsMTControler.hpp

Go to the documentation of this file.
00001 
00002 #ifndef CSignalsMTControler_hpp
00003 #define CSignalsMTControler_hpp
00004 
00005 /*
00006  * Descripcion: Controlador de señales para aplicación MT.
00007  *              Se evita el que un handle se llame más de una vez (una por thread).
00008  *              Habrá un metodo que deberá correr en un thread y se encargará de tratar
00009  *              las señales.
00010  * Notas: 
00011  *    - No es MT safe (no se puede usar de manera segura en mas de un thread)
00012  *    - En una aplicación MT si instalamos este manejador así de manera global
00013  *      Cada uno de los threads va a recibir la señal (al menos en Linux)
00014  *    - Esta implementación no se puede usar como singleton (tiene un metodo de inicialiación
00015  *      aparte del constructor
00016  *
00017  *
00018  */
00019 
00020 #include <ace/Singleton.h>
00021 #include <ace/Signal.h>               // definición de NSIG
00022 #include "jic/signal/CSignalHandle.hpp"
00023 #include "jic/signal/CSignalsControler.hpp"
00024 #include <ace/Synch.h>
00025 
00026 namespace SIGNAL
00027 {
00028   
00029 class CSignalsMTControler : public CSignalsControler
00030 {
00031 public:
00032 
00033   virtual CSignalHandle *registerHandler(int sigNum,CSignalHandle *signalHandler);
00034   virtual CSignalHandle *removeHandler(int sigNum);
00035             
00036   friend class ACE_Unmanaged_Singleton<CSignalsMTControler, ACE_SYNCH_MUTEX>;  // Investigar porque
00037                                                                              // esto no tiene efecto (1)
00038   CSignalsMTControler();  // Si (1) tuviese efecto este constructor sería privado/protegido, lo cual sería
00039                         // lo suyo @
00040   
00041 protected:
00042   static void * entryPoint(void *arg);  
00043   static void dispatcher(int sigNum);
00044   
00045 private:  
00046   static ACE_Thread_Mutex m_mutex;                // Asegura que los cambios sobre los booleanos de
00047                                                   // las activaciones se hagan de manera correcta  
00048   static bool m_signalActivated[NSIG];
00049   
00050 }; 
00051 
00052 typedef ACE_Unmanaged_Singleton<CSignalsMTControler, ACE_SYNCH_MUTEX> SignalsMTControler; // El objeto Singleton
00053 
00054   
00055 } /* SIGNAL */
00056 
00057 #endif

Generated on Wed Mar 5 21:31:47 2003 for JIC by doxygen1.3-rc3