00001 00002 #ifndef CProducer_h 00003 #define CProducer_h 1 00004 00005 #include "jic/exc/CCreateException.hpp" 00006 00007 // CFnProducer 00008 #include "jic/task/CFnProducer.hpp" 00009 // CChainTask 00010 #include "jic/task/CChainTask.hpp" 00011 00012 namespace TASK { 00013 00014 // Produce mensajes (solo hace puts). 00015 // El trabajo lo realizará un objeto función. 00016 00017 template <class MessageType> 00018 class CProducer : public CChainTask<MessageType> 00019 { 00020 00021 public: 00022 CProducer(); 00023 00024 // El task no libera el objeto funcion, solo se queda con 00025 // su "referencia". 00026 // Es necesario pasarle un controlador. 00027 CProducer (const CFnProducer<MessageType> *fnProducer, CTasksChainControler<MessageType> *pTaskControler, std::string strName = "Productor", int nThreads = 1) throw (CCreateException); 00028 00029 ~CProducer(); 00030 00031 // Additional Public Declarations 00032 00033 protected: 00034 00035 virtual void specificStep () /*throw (CTaskException)*/; 00036 00037 // Additional Protected Declarations 00038 00039 private: 00040 CProducer(const CProducer< MessageType > &right); 00041 00042 CProducer< MessageType > & operator=(const CProducer< MessageType > &right); 00043 00044 // Additional Private Declarations 00045 00046 private: 00047 // Data Members for Class Attributes 00048 00049 CFnProducer<MessageType> *m_fnProducer; 00050 00051 // Data Members for Associations 00052 00053 // Additional Implementation Declarations 00054 00055 }; 00056 00057 // Parameterized Class TASK::CProducer 00058 00059 } // namespace TASK 00060 00061 #if defined (ACE_TEMPLATES_REQUIRE_SOURCE) 00062 #include "CProducer.cpp" 00063 #endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ 00064 00065 #endif