mrDarker
2025-08-09 7201dd0993a94087a1c03e4f9700e3a6128d17e9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#pragma once
 
#include "ThreadData.h"
#include "ThreadPool.h"
 
#include <deque>
typedef std::deque<CWorkThreadData*>                DequeWorkThreadData;
typedef std::deque<CWorkThreadData*>::iterator        DequeWorkThreadDataIt;
 
class AFX_EXT_CLASS CWorkThreadPool : public CThreadPool
{
public:
    CWorkThreadPool(int nThreadCount=1);
    virtual ~CWorkThreadPool(void);
    size_t GetThreadDataCount();
 
protected:
    virtual void WorkThreadProcess(PVOID pParameter) = 0;
 
protected:
    BOOL CreateWorkThread(PVOID pParameter);
    void CloseWorkThread();
    void ClearThreadData();
    static VOID CALLBACK WorkCallback(PTP_CALLBACK_INSTANCE pInstance, PVOID pParameter, PTP_WORK pWork);
 
private:
    CWorkThreadData* AddThreadData(CWorkThreadData* pThreadData);
 
protected:
    PTP_WORK                m_pWork;
    PTP_WORK_CALLBACK        m_pWorkCallback;
 
private:
    DequeWorkThreadData        m_deqThreadData;
    CCriticalSection        m_csThreadData;
};