#pragma once #include "ThreadData.h" #include "ThreadPools.h" #include "afxmt.h" #include typedef std::vector VectorWorkThreadData; typedef std::vector::iterator VectorWorkThreadDataIt; class AFX_EXT_CLASS CWorkThreadPools : public CThreadPools { public: CWorkThreadPools(int nThreadCount=1); virtual ~CWorkThreadPools(void); size_t GetThreadDataCount() const; protected: virtual void WorkThreadProcess(PVOID pParameter) = 0; protected: void RunWorkThread(PVOID pParameter); BOOL CreateWorkThread(PVOID pParameter); void CloseWorkThread(); void ClearThreadData(); static VOID CALLBACK WorkCallback(PTP_CALLBACK_INSTANCE pInstance, PVOID pParameter, PTP_WORK pWork); protected: PTP_WORK m_pWork; PTP_WORK_CALLBACK m_pWorkCallback; VectorWorkThreadData m_vecThreadData; size_t m_nThreadDataCount; CCriticalSection m_csThreadData; };