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);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章