simplethreadpool.h
来自「sspi_workbench」· C头文件 代码 · 共 44 行
H
44 行
#pragma once
class SimpleThreadPool {
public:
typedef void (*ERR_FCN)(const wchar_t*, bool, DWORD);
typedef void (*WORKER_THREAD_PROC)(void* pCtx, int nType, void* pv);
typedef bool (*WM_DISPATCH_FCN)(MSG& msg);
SimpleThreadPool(ERR_FCN errFcn, WORKER_THREAD_PROC worker);
~SimpleThreadPool();
void init();
void postJob(void* pCtx, int nType, void* pv = 0, HANDLE hEvent = 0);
bool executeJob(void* pCtx, int nType, void* pv, WM_DISPATCH_FCN wmDispatchFcn);
bool close(DWORD nMillisecondsToWaitBeforeTerminatingThreads);
private:
void operator=(const SimpleThreadPool&); // not impl
struct Job {
Job(void* _pCtx, int _nType, void* _pv, HANDLE _hEvent)
: pCtx(_pCtx), nType(_nType), pv(_pv), hEvent(_hEvent)
{}
void* pCtx;
int nType;
void* pv;
HANDLE hEvent;
};
void _err(const wchar_t* psz, bool bRecoverable = false, DWORD err = GetLastError()) {
m_errFcn(psz, bRecoverable, err);
}
bool _waitAndPumpMessages(DWORD cHandles, HANDLE* prgHandles, WM_DISPATCH_FCN wmDispatchFcn);
bool _drainMessageQueue(WM_DISPATCH_FCN wmDispatchFcn);
static DWORD WINAPI _threadProc(void* pv);
static DWORD _calcThreadCount();
const ERR_FCN m_errFcn;
const DWORD m_cThreads; // ORDER_DEPENDENCY
HANDLE m_iocp; // io completion port
WORKER_THREAD_PROC m_worker;
HANDLE* m_prgThreads; // ORDER_DEPENDENCY
bool m_bClosed;
};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?