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

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

  1. #include<Windows.h>
  2. #include<iostream>
  3. #include<cstdlib>
  4. using namespace std;
  5. #define THREAD_NUM 10
  6. struct tempStruct
  7. {
  8. int a;
  9. int b;
  10. };
  11. VOID CALLBACK SimpleCallback(PTP_CALLBACK_INSTANCE Instance,void* Context);
  12. VOID CALLBACK WorkCallbackTemp(PTP_CALLBACK_INSTANCE Instance, void* Context, PTP_WORK Work);
  13. void main()
  14. {
  15. PTP_WORK tpWork[THREAD_NUM];
  16. tempStruct transferStruct[THREAD_NUM];
  17. for ( int i = 0; i< THREAD_NUM; i++ )
  18. {
  19. transferStruct[i].a = i;
  20. transferStruct[i].b = i+1;
  21. }
  22. //单次工作提交
  23. TrySubmitThreadpoolCallback(SimpleCallback,&transferStruct[2],NULL);
  24. for ( int i = 0; i< THREAD_NUM; i++ )
  25. tpWork[i] = CreateThreadpoolWork(WorkCallbackTemp,&transferStruct[i],NULL);
  26. //提交工作
  27. for ( int i = 0; i< THREAD_NUM; i++ )
  28. SubmitThreadpoolWork(tpWork[i]);
  29. //等待工作结束
  30. for ( int i = 0; i< THREAD_NUM; i++ )
  31. WaitForThreadpoolWorkCallbacks(tpWork[i],false);
  32. //关闭工作对象
  33. for ( int i = 0; i< THREAD_NUM; i++ )
  34. CloseThreadpoolWork(tpWork[i]);
  35. system("pause");
  36. }
  37. VOID CALLBACK SimpleCallback(PTP_CALLBACK_INSTANCE Instance,void* Context)
  38. {
  39. tempStruct *pt = (tempStruct *)Context;
  40. int pruduct = pt->a * pt->b;
  41. cout <<"Simple struct a: "<<pt->a<<" struct_temp.b: "<<pt->b<<" pruduct: "<<pruduct<<endl;
  42. }
  43. VOID CALLBACK WorkCallbackTemp(PTP_CALLBACK_INSTANCE Instance, void* Context, PTP_WORK Work)
  44. {
  45. tempStruct *pt = (tempStruct *)Context;
  46. int sum = pt->a + pt->b;
  47. cout <<"Work struct a: "<<pt->a<<" struct_temp.b: "<<pt->b<<" sum: "<<sum<<endl;
  48. }

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

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

最新文章

  1. 百度编辑器UEditor常用设置函数大全
  2. CSS3 动画
  3. Linux文件系统介绍(转)
  4. MFC MSBDutyTable下载地址
  5. 使用shiro的SimpleHash来生成常用的摘要串
  6. &quot;浅谈Android&quot;第一篇:Android系统简介
  7. Java中字节流和字符流的比较(转)
  8. Web Components之Custom Elements
  9. 可视化SNV安装
  10. Image.FromFile 方法锁住文件解决方法
  11. 【原创】Mac上编译Hadoop1.0.3出现的一些问题
  12. 关于函数strtok和strtok_r的使用要点和实现原理(二)
  13. idea调试SpringMvc, 出现:”通配符的匹配很全面, 但无法找到元素 &#39;mvc:annotation-driven&#39; 的声明“错误的解决方法
  14. Collections 的 synchronized XXX方法
  15. YouTube数据:谁获得了最多订阅者?
  16. Tomcat使用IDEA远程Debug调试
  17. Oracle两个数据库互相访问,DBLink使用-转
  18. ftok函数
  19. NoSQL非结构化数据库高级培训课程-大纲
  20. yaf windows安装

热门文章

  1. python基础之装饰器扩展和迭代器
  2. spark stream简介
  3. Maven系列之快速入门
  4. ansible-2
  5. webstrom Certificate validation failed
  6. 如何使用Idea导入jar包
  7. Parameter &#39;limit&#39; not found. Available parameters are [arg1, arg0, pa
  8. ACE_DEBUG buffer
  9. Pascal游戏 大富翁MUD
  10. SpringMVC 集成 Velocity 模板引擎