rendered paste body#ifndef __WORKERGROUP_H__
#define __WORKERGROUP_H__
#include <iostream>
#include <string>
#include <stdexcept>
#include <thread.h>
#include <messageQueue.h>
using namespace std;
namespace ldap_proxy {
template <class WorkerType, class MessageType>
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<MessageType> queue;
};
template <class WorkerType, class MessageType>
WorkerGroup<WorkerType,MessageType>::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 <class WorkerType, class MessageType>
void WorkerGroup<WorkerType, MessageType>::addMessage(MessageType msg)
{
queue.addMessage(msg);
}
}