在上篇博文中,我们简单地将每个线程的 执行函数进行了抽象化,这篇博文在此基础上设计了一个简单的任务池,废话不说,直接上代码:
#ifndef __TASK__POOL__H
#define __TASK__POOL__H
#include "Thread.h"
#include "Task.h"
#include <stack>
#include <boost/thread/mutex.hpp>
#include <boost/thread/locks.hpp>
static boost::mutex g_mutex;
class TaskPool
{
public:
TaskPool(){}
~TaskPool(){}
public:
void addTask(Task* task)
{
g_mutex.lock();
taskList.push(task);
g_mutex.unlock();
}
void runTask()
{
Thread* thread = threadPool.assignThread();
assert(thread);
g_mutex.lock();
Task* task = taskList.top();
taskList.pop();
g_mutex.unlock();
thread->setThreadFun(task);
thread->run();
}
private:
std::sta