#ifndef __WORKERGROUP_H__ #define __WORKERGROUP_H__ #include #include #include #include #include using namespace std; namespace ldap_proxy { template class WorkerGroup { public: WorkerGroup(int count); virtual ~WorkerGroup() throw( std::runtime_error); void start() throw( std::runtime_error); void shutdown(); void addMessage(MessageType msg); private: int m_workersCount; WorkerType workers[]; MessageQueue queue; }; template WorkerGroup::WorkerGroup(int workersCount) { m_workersCount = workersCount; for(int i = 0; i < m_workersCount; i++) { workers[i] = WorkerType(&queue); } } WorkerGroup::~WorkerGroup() { for(int i = 0; i < m_workersCount; i++){ delete workers[i]; } delete [] workers; } void WorkerGroup::start() throw ( std::runtime_error ) { for(int i = 0; i < m_workersCount; i++) { workers[i].start(); } } void WorkerGroup::shutdown() { for(int i = 0; i < m_workersCount; i++) { workers[i].shutdown(); } for(int i = 0; i < m_workersCount; i++) { workers[i].wait(); } } template void WorkerGroup::addMessage(MessageType msg) { queue.addMessage(msg); } }