[普通]Windows线程池

作者(passion) 阅读(1478次) 评论(0) 分类( c++)

新的线程池函数必须在Vista操作系统或以上实现,且 C++ 编译器版本至少是 VS2008;旧的线程池函数则可以在2000/XP下实现

Vista/2008/7(大多实现在用户态,效率更高):

         1:单步使用线程池:TrySubmitThreadpoolCallback 

         2:两步使用线程池:CreateThreadpoolWork/SubmitThreadpoolWork

                         等待工作完成:WaitForThreadpooWorkCallbacks

                         清理:CloseThreadpoolWork。这样可以多次提交

         3:线程池定时器:CreateThreadpoolTimer/CloseThreadpoolTimer/

                       WaitForThreadpoolTimerCallbacks

         4:I/O完成端口:CreateThreadpoolIo/IoCompletioCallback/

                      StartThreadpoolIo/CloseThreadpoolIo/

                      WaitForThreadpoolIoCallbacks

         5:注册等待:CreateThreadpoolWait/SetThreadpoolWait/

                    CloseThreadpoolWait/WaitForThreadPoolWaitCallbacks

         6:线程池设置:InitializeThreadpoolEnviroment/DestroyThreadpoolEnviroment

                     CreateThreadpool/SetThreadpoolCallbackPool/CloseThreadpool/

                     SetThreadpoolThreadMinimum/SetThreadpoolThreadMaximum

                     CreateThreadpoolCleaupGroup/SetThreadpoolCallbackCleanupGroup/

                     CloseThreadpoolCleanupGroupMembers/CloseThreadpoolCleanupGroup/

                     DisassociateCurrentThreadFromCallback

                     CallbackMayRunLong/SetThreadpoolCallbackRunLog(提示线程可能会运行很久)

                     LeaveCriticalSectionWhenCallbackReturns/FreeLibraryWhenCallbackReturns/

                     ReleaseMutexWhenCallbackReturns/ReleaseSemaphoreWheCallbackReturns/

                     SetEvetWheCallbackReturns

2000/XP(大多实现在内核态,效率不高):

         1:使用线程池:QueueUserWorkItem

         2:定时器:CreateTimerQueue/CreateTimerQueueTimer/

                 ChangeTimerQueueTimer/DeleteTimerQueueTimer/DeleteTimerQueue

         3:I/O完成端口:BindIoCompletioCallback/FileIoCompletionRoutine

         4:注册等待:RegisterWaitForSingleObject/UnregisterWait(Ex)

CLR:

          1:线程池:ThreadPool.QueueUserWorkItem/UnsafeQueueUserWorkItem

          2:I/O完成端口:ThreadPool.BindHandle/UnsafeQueueNativeOverlapped(WCF使用了这个函数)

          3:定时器:System.Threadig.Timer

          4:注册等待:ThreadPool.RegisterWaitForSingleObject/UnsafeRegisterWaitForSingleObject

          5:线程管理:ThreadPool.SetMaxThreads/SetMinThreads

4、线程池的使用
线程池能够帮助我们做一下事情:

    ①:以异步的方式调用一个函数。

    ②:每隔一段时间调用一个函数。

    ③:当内核对象触发时调用一个函数。

    ④:当异步IO完成时调用一个函数。

①、以异步的方式调用一个函数

即使用线程池中的一个线程来执行一个函数。

TrySubmitThreadpoolCallback():向线程池提交工作请求(一次性提交)。
CreateThreadpoolWork():为线程池创建一个提交工作的工作对象。
SubmitThreadpoolWork():向线程池提交工作请求(可以多次提交)。
WaitForThreadpoolWorkCallbacks():取消已提交但未执行的工作项/等待工作项处理完成而将自己挂起。
CloseThreadpoolWork():关闭可以多次提交工作的工作对象。


« 上一篇:wifi共享上网(至尊版wifi)
« 下一篇:emplace_back() 和 push_back 的区别
在这里写下您精彩的评论
  • 微信

  • QQ

  • 支付宝

返回首页
返回首页 img
返回顶部~
返回顶部 img