windows下利用线程池完成多任务的分配和运行
2024-09-02 07:51:47
在做项目的过程中有时候为了提升效率,用了多线程的方法来对任务进行分割和应用,后来发现,采用线程池的方法能更好的利用线程资源来计算任务,网上有很多关于如何运行线程池的例子,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,希望对需要的朋友有帮助!
最新文章
- 百度编辑器UEditor常用设置函数大全
- CSS3 动画
- Linux文件系统介绍(转)
- MFC MSBDutyTable下载地址
- 使用shiro的SimpleHash来生成常用的摘要串
- ";浅谈Android";第一篇:Android系统简介
- Java中字节流和字符流的比较(转)
- Web Components之Custom Elements
- 可视化SNV安装
- Image.FromFile 方法锁住文件解决方法
- 【原创】Mac上编译Hadoop1.0.3出现的一些问题
- 关于函数strtok和strtok_r的使用要点和实现原理(二)
- idea调试SpringMvc, 出现:”通配符的匹配很全面, 但无法找到元素 &#39;mvc:annotation-driven&#39; 的声明“错误的解决方法
- Collections 的 synchronized XXX方法
- YouTube数据:谁获得了最多订阅者?
- Tomcat使用IDEA远程Debug调试
- Oracle两个数据库互相访问,DBLink使用-转
- ftok函数
- NoSQL非结构化数据库高级培训课程-大纲
- yaf windows安装