上一篇我把创建单个线程的源码给出来了,当然,线程池的也不能拉下~
很多时候,我们需要一组线程来解决问题。当然可以创建一些线程来完成工作,然后关闭掉。当又需要时,重复上述过程即可。然而,无论是客户端还是服务端,完全没必要如此,只需要实现创建一组线程,按需分配,不必创建--关闭--创建--关闭…
也许我们也能自己写成符合需求的线程池组件,但是,系统也提供了线程池组件。我认为就应该重复利用(出于学习的目的另当别论)。在这里,主要针对XP系统,提供一组C++ wrap过的线程池组件和模仿ATL线程池。当然,使用系统的线程池有一定的限制(设置线程堆栈大小等)。但还是能满足大部分的需求。
首先,来看看系统线程池(据《Windows核心编程》所说,在内部都是用完成端口来管理的)
Windows 线程池中的线程有两种类型,一种可以用来处理异步I/O, 另一种则不能。前者依赖于IO完成端口,IOCP是一种Windows内核对象,它可以将线程和I/O端口绑定在特定的系统资源上,对带有完成端口的I/O进行处理是一个复杂的过程。
- QueueUserWorkItemPool--Windows将创建一个线程池,其中的一个线程将执行 回调函数,函数执行完成后,该线程返回线程池,等待新的任务。当然了,你不能在该线程