Windows核心编程 - 线程池

    Windows提供了一个线程池机制来简化线程的创建、销毁及管理工作。有以下情形可使用线程池:

1. 以异步的方式来调用一个函数;

     1)首先定义一个回调函数,函数原型:

        void NTAPI SimpleCallback(

                PTP_CALLBACK_INSTANCE pInstance,

                PVOID pvContext);

     2)为了让线程池中的一个线程执行上面的回调函数,需调用下面的函数向线程池提交一个请求:

        BOOL TrySubmitThreadpoolCallback(

               PTP_SIMPLE_CALLBACK pfnCallback,

              PVOID pvContext,

            PTP_CALLBACK_ENVIRON pcbe);

 

2.每隔一段时间调用一个函数 ;

         1)首先定义一个回调函数,函数原型:void CALLBACK T imeoutCallback(

             PTP_CALLBACK_INSTANCE pInstance,

            PVOID pvContext,

            PTP_TIMER pTimer);

        2) 调用下面函数告知线程池在何时调用回调函数:

   PTP_TIMER  CreateThreadpoolTimer(

               PTP_TIMER_CALLBACK pfnTimerCallback,

              PVOID pvContext,

            PTP_CALLBACK_ENVIRON pcbe);

        3) 当想向线程池注册计时器时应调用下面的函数:

           VOID SetThreadpoolTimer(

               PTP_TIMER pTimer,

              PFILETIME pftDueTime,

             DWORD msPeriod,

            DWORD msWindowLength);

        

3.当内核对象触发的时候调用一个函数;

     1)首先定义一个回调函数,函数原型:void CALLBACK WaitCallback(

             PTP_CALLBACK_INSTANCE pInstance,

            PVOID pvContext,

            PTP_WAIT Wait,

            TP_WAIT_RESULT WaitResult);

        2) 调用下面函数来创建一个线程池等待对象:

   PTP_WAIT CreateThreadpoolWait(

               PTP_WAIT_CALLBACK pfnWaitCallback,

              PVOID pvContext,

            PTP_CALLBACK_ENVIRON pcbe);

        3) 调用下面的函数将一个内核 绑定到这个线程池:

           VOID SetThreadpoolWait(

               PTP_WAIT pWaitItem,

              HANDLE hObject,

              PFILETIME pftTimeout`);

 

4.当异步I/O请求完成的时候调用一个函数。

       1) 指定一个回调函数,函数原型:

             VOID CALLBACK OverlappedCompletionRoutine(

                    PTP_CALLBACK_INSTANCE pInstance,

                   PVOID pvContext,

                   PVOID pOverlapped,

                  ULONG IoResult,

                  ULONG NumberOfBytesTransferred,

                  PTP_IO pIo);

         2)调用下面的函数创建一个线程池I/O对象:

            PTP_IO CreateThreadpoolIo(

               HANDLE hDevice,

               PTP_WIN32_IO_CALLBACK pfnIoCallback,

              PVOID pvContext,

            PTP_CALLBACK_ENVIRON pcbe);

            3)调用下面的函数将设备线程池内部的I/O完成端口关联起来:

                VOID StartThreadpoolIo(PTP_IO pio);

             4)调用下面的函数让线程池停止调用回调函数:

                VOID CancelThreadpoolIo(PTP_IO pio);

              5)调用下面的函数解除文件/设备与线程池I/O完成端口的关联:

                VOID CloseThreadpoolIo(PTP_IO pio);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值