Windows 线程池
本节内容有:
1 以异步方式调用函数
windows 线程池新的线程池函数有异步方式的函数原型
VOID NTAPI SimpleCallBack(PTP_CALLBACK_INSTANCE pInstance,PVOID pvContext);
提交一个请求 调用成功返回TRUE,失败返回FALSE
BOOL TrySubmitThreadpoolCallback(PTP_SIMPLE_CALLBACK pfnCallBack,PVOID pvContext,PTP_CALLBACK_ENVIRON pcbe);
创建一个工作项
PTP_WORD CreateThreadpoolWork(PTP_WORD_CALLBACK pfnwordHandler,PVOID PVcontxt,PTP_callBack_Environ pcbe);
工作项的回调函数
VOID CallBack wordCallBack(PTP_CALLBACK_INSTANCE Instance,PVOID Context,ptp_word word);
向线程池提交一个请求void SubmitThreadpoolword(PTP_WORD pword);
取消已经提交的工作项或者将自己挂起void WaitforThreadpoolWordCallbacks(PTP_WORD Pword,BOOL bCancelPendingCallbacks);
不需要一个工作项时调用
void CloseThreadpoolWord(PTP_WORD pwk);
异步函数的代码在最下面
2 每隔一段时间调用一个函数
有时应用程序需要在某些时间执行某些任务,windos 提供了可等待的计时器内核对象,它使我们很容易就能够得到一个基于时间的通知。
我们可以使用线程池函数来管理可等待计时器,包括重置和等待下一次触发。
为了将一个工作项安排在某个时间执行,我们必须定义一个回调函数,函数声明如下:
VOID CALLBACK TimeoutCallBack(PTP_CALLBACK_INSTANCE pInstance, 回调函数终止操作讲解
PVOID pvContext, 下面函数传过来的
PTP_TIMER pTimer); 下面函数的返回值
然后调用下面的函数通知线程池应该在何时调用我们的函数:
PTP_TIMER CreateThreadpoolTimer(
PTP_TIMER_CALLBACK pfnTimerCallBack,
PVOID pvcontext,
PTP_CALLBACK_ENVIRON pcbe);
第一个参数是函数指针,第2个参数是传递给回调函数的值,参数3 后面讲
当我们想要向线程池注册计时器的时候,应该调用SetThreadpoolTimer函数:
VOIDWINAPISetThreadpoolTimer(
__inout PTP_TIMER pti,
__in_opt PFILETIME pftDueTime,
__in DWORD msPeriod,
__in_opt DWORD msWindowLength );
参数 pti 用来标识CreateThreadpoolTimer返回的TP_TIMER 对象.