00001 00002 #ifndef CSignalsControler_hpp 00003 #define CSignalsControler_hpp 00004 00005 /* 00006 * Notas: 00007 * - No es MT safe (no se puede usar de manera segura en mas de un thread) 00008 * - En una aplicación MT si instalamos este manejador así de manera global 00009 * Cada uno de los threads va a recibir la señal (al menos en Linux) 00010 * 00011 */ 00012 00013 #include <ace/Singleton.h> 00014 #include <ace/Signal.h> // definición de NSIG (== numero de señal + grande + 1) 00015 #include "jic/signal/CSignalHandle.hpp" 00016 #include "jic/signal/CSignalsControlerBase.hpp" 00017 #include <ace/Synch.h> 00018 00019 namespace SIGNAL 00020 { 00021 00022 class CSignalsControler : public CSignalsControlerBase 00023 { 00024 public: 00025 00026 virtual CSignalHandle *registerHandler(int sigNum,CSignalHandle *signalHandler); 00027 virtual CSignalHandle *removeHandler(int sigNum); 00028 00029 friend class ACE_Unmanaged_Singleton<CSignalsControler, ACE_SYNCH_MUTEX>; // Investigar porque 00030 // esto no tiene efecto (1) 00031 CSignalsControler(); // Si (1) tuviese efecto este constructor sería privado/protegido, lo cual sería 00032 // lo suyo @ 00033 00034 protected: 00035 static CSignalHandle *m_signalHandlers[NSIG]; 00036 static void dispatcher(int sigNum); 00037 00038 private: 00039 00040 00041 00042 }; 00043 00044 typedef ACE_Unmanaged_Singleton<CSignalsControler, ACE_SYNCH_MUTEX> SignalsControler; // El objeto Singleton 00045 00046 00047 } /* SIGNAL */ 00048 00049 #endif