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; 
};