#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <process.h>
using namespace std;
INT i;
VOID CALLBACK Fun(PTP_CALLBACK_INSTANCE Instancd,PVOID Context,PTP_WORK Work){
cout<<i++<<'\t';
}
int main(){
PTP_WORK pw;
TP_CALLBACK_ENVIRON cbe;
PTP_POOL pool;
pool=CreateThreadpool(NULL);//创建线程池
if(NULL==pool ){
cout<<"createThreadpoll failed!"<<endl;
return -1;
}
SetThreadpoolThreadMaximum(pool,100);
SetThreadpoolThreadMinimum(pool,1);
InitializeThreadpoolEnvironment(&cbe);
SetThreadpoolCallbackPool(&cbe,pool);
pw=CreateThreadpoolWork(Fun,NULL,&cbe);//创建工作项
for(int i=0;i<10000;i++){
SubmitThreadpoolWork(pw);//提交工作项
}
WaitForThreadpoolWorkCallbacks(pw, FALSE);//等待工作结束
CloseThreadpoolWork(pw);
system("pause");
return 0;
}
下面是一些函数的用法和步骤,摘自:http://www.cnblogs.com/wz19860913/articles/1274214.html
PTP_POOL pThreadpool = CreateThreadpool(NULL); // 创建线程池
// 设置线程池线程数量上下限
SetThreadpoolThreadMinimum(pThreadpool, 2);
SetThreadpoolThreadMaximum(pThreadpool, 10);
// 初始化“回调函数环境”结构
TP_CALLBACK_ENVIRON tcbe;
InitializeThreadpoolEnvironment(&tcbe);
// 将该回调函数环境结构与线程池相关联
SetThreadpoolCallbackPool(&tcbe, pThreadpool);
// 创建清理组
PTP_CLEANUP_GROUP pTpcg= CreateThreadpoolCleanupGroup();
// 将回调函数环境结构与清理组关联起来
SetThreadpoolCallbackCleanupGroup(&tcbe, pTpcg, NULL);
// 现在可以创建一些项,提交给线程池
PTP_WORK pTpWork = CreateThreadpoolWork(, &tcbe);// 创建一个工作项
SubmitThreadpoolWork(pTpWork); // 提交工作项
PTP_TIMER pTpTimer = CreateThreadpoolTimer(, &tcbe);// 创建一个定时器项
SetThreadpoolTimer(pTpTimer, ); // 提交定时器
PTP_WAIT pTpWait = CreateThreadpoolWait(, &tcbe);// 创建一个等待项
SetThreadpoolWait(pTpWait, ); // 提交等待项
PTP_IO pTpIO = CreateThreadpoolIo(, &tcbe); // 创建一个IO项
StartThreadpoolIo(pTpIO); // 开始执行IO项
// 等待所有项完成
CloseThreadpoolCleanupGroupMembers(pTpcg, FALSE, NULL);
// 关闭各个项
CloseThreadpoolWork(pTpWork);
CloseThreadpoolTimer(pTpTimer);
CloseThreadpoolWait(pTpWait);
CloseThreadpoolIo(pTpIO);
CloseThreadpoolCleanupGroup(pTpcg); // 关闭线程池清理组
DestroyThreadpoolEnvironment(&tcbe); // 删除回调函数环境结构
CloseThreadpool(pThreadpool); // 关闭线程池