在做项目的过程中有时候为了提升效率,用了多线程的方法来对任务进行分割和应用,后来发现,采用线程池的方法能更好的利用线程资源来计算任务,网上有很多关于如何运行线程池的例子,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,希望对需要的朋友有帮助!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2013-04-18 SQL触发器实例讲解
2012-04-18 js获取触发事件元素的坐标
2012-04-18 JavaScript event对象clientX,offsetX,screenX异同 带图 .
2012-04-18 js拖动原理
2012-04-18 js事件列表
2012-04-18 javascript 中ondragstart ondrag实现拖动界面元素效果 .