All pastes #563896 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-06-13 10:55 UTC
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);
}

}