首页 > 代码库 > 线程池的使用,未完待续

线程池的使用,未完待续

#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); // 关闭线程池