www.pudn.com > ThreadPoolcw.rar > ThreadPool.h
#pragma once #include#include #ifdef TP_DLL_EXPORT #define _TP_DLL_EXPORT __declspec(dllexport) #else #define _TP_DLL_EXPORT __declspec(dllimport) #pragma comment(lib,"ThreadPool.lib") #endif class _TP_DLL_EXPORT CThreadTask{ //线程池任务,虚类,用于派生具体任务类 public: CThreadTask(void); virtual ~CThreadTask(void); public: HRESULT Begin(void); //开始任务 virtual HRESULT Run(void); //任务运行过程 virtual HRESULT OnEnd(void); //任务完毕后结果的处理 }; typedef struct tagThreadRecord { DWORD dwThreadId; DWORD dwExitCode; HANDLE hThread; BOOL bRun; }ThreadRecord,* lpThreadRecord; class _TP_DLL_EXPORT CThreadPool{ public: CThreadPool(void); ~CThreadPool(void); HRESULT Init(UINT ThreadNum); HRESULT Release(void); public: void Lock(void); void UnLock(void); void AddTask(CThreadTask * pTask); HANDLE GetRH(void){return hRunning;}; HANDLE GetQH(void){return hQuit;} CThreadTask * GetNext(void); ThreadRecord * GetThread(int idx); static DWORD WINAPI WorkThread_Proc(LPVOID lParam); private: enum{ eMax = 10 }; CRITICAL_SECTION csLock; ThreadRecord store[eMax]; int total; int run; HANDLE hRunning; HANDLE hQuit; std::list
task; };