新的线程池函数必须在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():关闭可以多次提交工作的工作对象。
微信
支付宝