【Windows核心编程笔记】第十一章 线程池的使用

线程池开销并不小,所以使用之前先想好你是否真的需要它

 

以异步方式调用函数

定义函数: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        销毁线程池

你可能感兴趣的:(学习笔记,Windows编程)