windows下利用线程池完成多任务的分配和运行

在做项目的过程中有时候为了提升效率,用了多线程的方法来对任务进行分割和应用,后来发现,采用线程池的方法能更好的利用线程资源来计算任务,网上有很多关于如何运行线程池的例子,msdn上也给出了对应的例子:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686980(v=vs.85).aspx

感兴趣的话大家可以去看看,这里我给出一个简单的demo,利用线程池单次调用多次调用,例子如下:

#include<Windows.h>
#include<iostream>
#include<cstdlib>

using namespace std;

#define THREAD_NUM 10

struct tempStruct
{
	int a;
	int b;
};

VOID CALLBACK SimpleCallback(PTP_CALLBACK_INSTANCE Instance,void* Context);
VOID CALLBACK WorkCallbackTemp(PTP_CALLBACK_INSTANCE Instance, void* Context, PTP_WORK Work);

void main()
{
	PTP_WORK tpWork[THREAD_NUM];
	tempStruct transferStruct[THREAD_NUM];

	for ( int i = 0; i< THREAD_NUM; i++ )
	{
		transferStruct[i].a = i;
		transferStruct[i].b = i+1;
	}

	//单次工作提交
	TrySubmitThreadpoolCallback(SimpleCallback,&transferStruct[2],NULL);

	for ( int i = 0; i< THREAD_NUM; i++ )
		tpWork[i] = CreateThreadpoolWork(WorkCallbackTemp,&transferStruct[i],NULL);

	//提交工作
	for ( int i = 0; i< THREAD_NUM; i++ )
		SubmitThreadpoolWork(tpWork[i]);

	//等待工作结束
	for ( int i = 0; i< THREAD_NUM; i++ )
		WaitForThreadpoolWorkCallbacks(tpWork[i],false);

	//关闭工作对象
	for ( int i = 0; i< THREAD_NUM; i++ )
		CloseThreadpoolWork(tpWork[i]);	

	system("pause");
}

VOID CALLBACK SimpleCallback(PTP_CALLBACK_INSTANCE Instance,void* Context)
{
	tempStruct *pt = (tempStruct *)Context;

	int pruduct = pt->a * pt->b;
	cout <<"Simple struct a: "<<pt->a<<" struct_temp.b: "<<pt->b<<" pruduct: "<<pruduct<<endl;
}

VOID CALLBACK WorkCallbackTemp(PTP_CALLBACK_INSTANCE Instance, void* Context, PTP_WORK Work)
{
	tempStruct *pt = (tempStruct *)Context;

	int sum = pt->a + pt->b;
	cout <<"Work struct a: "<<pt->a<<" struct_temp.b: "<<pt->b<<" sum: "<<sum<<endl;
}

PS有个网站的教程写得很好,收益很多大家也可以去看看:http://www.cnblogs.com/kzloser/archive/2013/03/11/2909221.html

做个mark,希望对需要的朋友有帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值