📄 threadpool.h
字号:
/**
* threadpool.h
*/
#ifndef _SMAL_THREADPOOL_H
#define _SMAL_THREADPOOL_H
//#include <smal.h>
#include "smal.h"
struct IJobDesc
{
};
struct IWorker
{
virtual void ProcessJob(IJobDesc* pJob) = 0;
};
struct ThreadInfo
{
DWORD m_pThreadId;
HANDLE m_hThread;
bool m_bBusyWorking;
ThreadInfo()
{
m_hThread = 0;
m_bBusyWorking = false;
}
ThreadInfo(HANDLE handle, bool bBusy)
{
m_hThread = handle;
m_bBusyWorking = bBusy;
}
ThreadInfo(const ThreadInfo& info)
{
m_hThread = info.m_hThread;
m_bBusyWorking = info.m_bBusyWorking;
}
};
/*
线程池类
*/
class CThreadPool
{
friend static unsigned int CThreadPool::ManagerProc(void* p);
friend static unsigned int CThreadPool::WorkerProc(void* p);
protected:
enum ThreadPoolStatus { BUSY, IDLE, NORMAL };
public:
void Start(unsigned short nStatic, unsigned short nmax);
void Stop(bool bHash=false);
void ProcessJob(IJobDesc* pJob, IWorker* pWorker) const;
CThreadPool();
virtual ~CThreadPool();
protected:
HANDLE GetMgrIoPort() const { return m_hMgrIoPort; }
UINT GetMgrWaitTime() const { return 1000*60; } //1 minute
HANDLE GetWorkerIoPort() const { return m_hWorkerIoPort; }
private:
static unsigned int ManagerProc(void* p);
static unsigned int WorkerProc(void* p);
protected:
HANDLE m_hMgrThread;
HANDLE m_hMgrIoPort;
protected:
mutable UINT m_nNumberOfStaticThreads;
mutable UINT m_nNumberOfTotalThreads;
protected:
void AddThreads();
void RemoveThreads();
ThreadPoolStatus GetThreadPoolStatus();
void ChangeStatus(DWORD threadId, bool status);
void RemoveThread(DWORD threadId)
{
CSingleLock lock(&m_arrayCs);
lock.Lock();
m_threadMap.RemoveKey(threadId);
lock.Unlock();
}
protected:
CMap<DWORD, DWORD&, ThreadInfo, ThreadInfo&> m_threadMap;
CCriticalSection m_arrayCs;
HANDLE m_hWorkerIoPort;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -