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

    xiaoxiao2023-11-14  178

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

     

    以异步方式调用函数

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

    最新回复(0)