Interface如下
struct Job
{
void (*func)(void*);
void *para;
};
class ThreadPool:noncopyable
{
public:
static SetNumThreads(size_t NThread); //MUST called before Instance()
static ThreadPool& Instance();
boost::shared_ptr<Event> SubmitJob(const Job& job);
void WaitAllJobDone();
//make as public JUST FOR pass VC6 compile!
ThreadPool();
~ThreadPool();
private:
static void JobThread( void * pThis );
bool m_exit;
std::vector<unsigned long> m_threads;
struct JobData
{
Job job;
boost::shared_ptr<Event> event;
};
std::list<JobData> m_JobQueue;
Mutex m_jobMutex;
static size_t m_numThread;
};
{
void (*func)(void*);
void *para;
};
class ThreadPool:noncopyable
{
public:
static SetNumThreads(size_t NThread); //MUST called before Instance()
static ThreadPool& Instance();
boost::shared_ptr<Event> SubmitJob(const Job& job);
void WaitAllJobDone();
//make as public JUST FOR pass VC6 compile!
ThreadPool();
~ThreadPool();
private:
static void JobThread( void * pThis );
bool m_exit;
std::vector<unsigned long> m_threads;
struct JobData
{
Job job;
boost::shared_ptr<Event> event;
};
std::list<JobData> m_JobQueue;
Mutex m_jobMutex;
static size_t m_numThread;
};