线程池开销并不小,所以使用之前先想好你是否真的需要它
以异步方式调用函数
定义函数:VOID NTAPI SimpleCallback(…….)
TrySubmitThreadpoolCallback 让线程池中的线程执行该函数
考虑到性能和内存使用,如果大量提交,建议创建工作项一次,分多次提交
CreateThreadpoolWork 创建一个工作项
SubmitThreadpoolWork 向线程池提交一个请求
WaitForThreadpoolWorkCallback 取消已提交工作项或等待工作项完成后将自己挂起
CloseThreadpoolWork 不再需要工作项了
每隔一段时间调用一个函数
定义回调函数 VOID CALLBACK TimeoutCallback(…………..)
CreateThreadpoolTimer 通知线程池调用函数
SetThreadpoolTimer 向线程池注册定时器
IsThreadpoolTimerSet 判断定时器是否被重置
WaitForThreadpoolTimerCallbacks 线程等待一个计时器完成
CloseThreadpoolTimer 关闭
如果需要一次性计时器,应该在回调函数中调用SetThreadpoolTimer并传0给msPeriod,同时为了确保资源都被清理,在回调函数返回之前调用CloseThreadpoolTimer
在内核对象触发时调用一个函数
定义回调函数 VOID CALLBACK WaitCallback(……………)
CreateThreadpoolWait 创建一个线程池等待对象
SetThreadpoolWait 将一个内核对象绑定到这个线程池
WaitForThreadpoolWaitCallbacks 等待一个等待项完成
CloseThreadpoolWait 关闭
在异步IO请求完成时调用一个函数
定义函数 VOID CALLBACK OverlappedCompletionRoutine(…………….)
CreateThreadIo 创建一个线程池IO对象
StartThreadpoolIo 关联
CancelThreadpoolIo 发出请求后线程池停止调用回调函数
CloseThreadpoolIo 解除关联
WaitForThreadpoolIoCallbacks 另一个线程等待IO请求完成
回调函数的终止操作
CreateThreadpool 创建一个新的线程池,reserved保留字段必须传NULL
SetThreadpoolThreadMininum 设置线程池中线程的最小数量 (>=1)
SetThreadpoolThreadMaxinum 设置设置线程池中线程的最大数量 (<=500)
CloseThreadpool 销毁
回调环境
InitializeThreadpoolEnvironment 初始化
DestroyThreadpoolEnvironment 清理环境
SetThreadpoolCallbackpool 要添加的工作项由哪个线程池处理,否则使用默认的
SetThreadpoolCallbackRunsLong 工作项处理时间长
SetThreadpoolCallbackLibrary 确保如果线程池还有待处理的工作项,将一个特定的dll一直保持在进程的地址空间,避免死锁
默认线程池生命周期与进程相同,所以不适合清理组
CreateThreadpoolCleanupGroup 创建清理组
SetThreadpoolCallbackCleanupGroup 清理组关联邦定到线程池的TP_CALLBACK_ENVIRON
CloseThreadpoolCleanupGroupMembers 销毁线程池