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

简介: 在做项目的过程中有时候为了提升效率,用了多线程的方法来对任务进行分割和应用,后来发现,采用线程池的方法能更好的利用线程资源来计算任务,网上有很多关于如何运行线程池的例子,msdn上也给出了对应的例子:https://msdn.

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

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

 

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

 

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

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

目录
相关文章
|
19天前
|
存储 Java 数据库
如何处理线程池关闭时未完成的任务?
总之,处理线程池关闭时未完成的任务需要综合考虑多种因素,并根据实际情况选择合适的处理方式。通过合理的处理,可以最大程度地减少任务丢失和数据不一致等问题,确保系统的稳定运行和业务的顺利开展。
113 64
|
19天前
|
消息中间件 监控 Java
线程池关闭时未完成的任务如何保证数据的一致性?
保证线程池关闭时未完成任务的数据一致性需要综合运用多种方法和机制。通过备份与恢复、事务管理、任务状态记录与恢复、数据同步与协调、错误处理与补偿、监控与预警等手段的结合,以及结合具体业务场景进行分析和制定策略,能够最大程度地确保数据的一致性,保障系统的稳定运行和业务的顺利开展。同时,不断地优化和改进这些方法和机制,也是提高系统性能和可靠性的重要途径。
114 62
|
4月前
|
编解码 网络协议 API
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
|
13天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
42 12
|
2月前
|
缓存 负载均衡 Java
c++写高性能的任务流线程池(万字详解!)
本文介绍了一种高性能的任务流线程池设计,涵盖多种优化机制。首先介绍了Work Steal机制,通过任务偷窃提高资源利用率。接着讨论了优先级任务,使不同优先级的任务得到合理调度。然后提出了缓存机制,通过环形缓存队列提升程序负载能力。Local Thread机制则通过预先创建线程减少创建和销毁线程的开销。Lock Free机制进一步减少了锁的竞争。容量动态调整机制根据任务负载动态调整线程数量。批量处理机制提高了任务处理效率。此外,还介绍了负载均衡、避免等待、预测优化、减少复制等策略。最后,任务组的设计便于管理和复用多任务。整体设计旨在提升线程池的性能和稳定性。
82 5
|
2月前
|
应用服务中间件 Shell PHP
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
|
2月前
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
1050 1
|
3月前
|
Windows Python
python获取windows机子上运行的程序名称
python获取windows机子上运行的程序名称
|
3月前
|
小程序 Windows
MASM32编写的程序在Windows 7,10下运行正常,但在Win XP下运行时只闻其声不见其形的故障
MASM32编写的程序在Windows 7,10下运行正常,但在Win XP下运行时只闻其声不见其形的故障
|
3月前
|
Java Spring
运行@Async注解的方法的线程池
自定义@Async注解线程池
170 3