共享Windows下C++库之线程池篇

本文介绍了如何在Windows XP系统下使用C++封装线程池组件,包括QueueUserWorkItemPool、BindIOCompletionCallbackPool和RegisterWaitForSingleObjectPool。文章详细讲解了线程池的工作原理,特别是线程池如何通过IO完成端口管理线程,并给出了简单的使用示例。同时,作者提醒注意线程池中线程回调函数的行为限制,并提供了全部源码供读者参考。
摘要由CSDN通过智能技术生成

 

上一篇我把创建单个线程的源码给出来了,当然,线程池的也不能拉下~

 

很多时候,我们需要一组线程来解决问题。当然可以创建一些线程来完成工作,然后关闭掉。当又需要时,重复上述过程即可。然而,无论是客户端还是服务端,完全没必要如此,只需要实现创建一组线程,按需分配,不必创建--关闭--创建--关闭…

 

也许我们也能自己写成符合需求的线程池组件,但是,系统也提供了线程池组件。我认为就应该重复利用(出于学习的目的另当别论)。在这里,主要针对XP系统,提供一组C++ wrap过的线程池组件和模仿ATL线程池。当然,使用系统的线程池有一定的限制(设置线程堆栈大小等)。但还是能满足大部分的需求。

 

首先,来看看系统线程池(据《Windows核心编程》所说,在内部都是用完成端口来管理的)

Windows 线程池中的线程有两种类型,一种可以用来处理异步I/O, 另一种则不能。前者依赖于IO完成端口,IOCP是一种Windows内核对象,它可以将线程和I/O端口绑定在特定的系统资源上,对带有完成端口的I/O进行处理是一个复杂的过程。

 

  1. QueueUserWorkItemPool--Windows将创建一个线程池,其中的一个线程将执行 回调函数,函数执行完成后,该线程返回线程池,等待新的任务。当然了,你不能在该线程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值