#ifndef _WORKER_THREAD_MANAGER_H_ #define _WORKER_THREAD_MANAGER_H_ #include "WorkerThreadManagerInterface.h" #include "utils/mutex.h" #include #include #include class WorkerThreadManager : public WorkerThreadManagerInterface { public: WorkerThreadManager(unsigned threadsNumber = 5); virtual ~WorkerThreadManager(); virtual void PushTask(thread_function_t A_threadFun, result_function_t A_resultFun); void SignalResults(); private: static void* WorkerThread(void* A_data); void PushResult(int A_result, result_function_t A_resultFun); typedef boost::function signal_function_t; struct worker_thread_data_t { worker_thread_data_t(thread_function_t A_threadFun, result_function_t A_resultFun) : threadFun(A_threadFun), resultFun(A_resultFun) {} worker_thread_data_t() {} thread_function_t threadFun; result_function_t resultFun; }; const unsigned m_threadsNumber; pthread_t* m_pthreads; utils::Mutex m_tasksMutex; sem_t m_tasksSem; std::queue m_tasks; utils::Mutex m_resultsMutex; std::queue m_results; }; #endif