[Windows] Windows线程池

WaitAndWorkInThreadPool.h

#pragma once

#include <windows.h>
#include "common.h"

//Thread Pools
//https://docs.microsoft.com/zh-cn/windows/win32/procthread/thread-pools


//对RegisterWaitForSingleObject的包装,功能为 “等到内核对象后立刻新起线程执行指定的例程,这个线程是被注册到windows  thread pool 中的”


// 需要通过继承的方式实现,继承类必须实现WorkCB虚函数,使用起来灵活性差一点
// [当前不可用] 目前没想到好的方法让纯虚函数能够作为回调函数,后面有好的办法再实现
class WaitAndWorkInThreadPool_A
{
	DEFAULT_COPY(WaitAndWorkInThreadPool_A)

public:
	WaitAndWorkInThreadPool_A() = delete;
	explicit WaitAndWorkInThreadPool_A(const HANDLE& waitfor,PVOID param = NULL, DWORD flag = WT_EXECUTEDEFAULT, DWORD timeout = INFINITE);
	virtual ~WaitAndWorkInThreadPool_A();

protected:
	virtual VOID NTAPI WorkCB(PVOID p, BOOLEAN b) = 0;

private:
	HANDLE _h;
	PVOID _p;
	DWORD _f;
	DWORD _t;
};


// 通过指定回调函数指正实现,使用起来灵活性强
class WaitAndWorkInThreadPool_B final
{
	DEFAULT_COPY(WaitAndWorkInThreadPool_B)

public:
	WaitAndWorkInThreadPool_B() = delete;
	explicit WaitAndWorkInThreadPool_B(const HANDLE& waitfor, WAITORTIMERCALLBACK workcb ,PVOID param = NULL, DWORD flag = WT_EXECUTEDEFAULT, DWORD timeout = INFINITE);
	~WaitAndWorkInThreadPool_B();
};

WaitAndWorkInThreadPool.cpp

#include "WaitAndWorkInThreadPool.h"

WaitAndWorkInThreadPool_A::WaitAndWorkInThreadPool_A(const HANDLE& waitfor, PVOID param, DWORD flag, DWORD timeout)
	:_h(waitfor), _p(param) , _f(flag), _t(timeout)
{
	PHANDLE tmp;
	//RegisterWaitForSingleObject(tmp, _h, &WorkCB, _p, timeout, flag);
}

WaitAndWorkInThreadPool_A::~WaitAndWorkInThreadPool_A()
{
	
}

// ------------------------------------------------------------------------------------------------------------------

WaitAndWorkInThreadPool_B::WaitAndWorkInThreadPool_B(const HANDLE& waitfor, WAITORTIMERCALLBACK workcb, PVOID param , DWORD flag , DWORD timeout)
{
	PHANDLE tmp = NULL;
	RegisterWaitForSingleObject(tmp, waitfor, workcb, param, timeout, flag);
}

WaitAndWorkInThreadPool_B::~WaitAndWorkInThreadPool_B()
{

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值