线程数和最大线程数以及线程执行时间自动增加工作线程。线程池的代码在Delphi盒子上有下载
此发布修改了原作者在线程池Free时的一点问题:“不能结束工作中的工作者线程(资源死锁)”。
用法:
// 创建线程池 FThreadPool := TThreadsPool.Create(Self); // 创建线程池 FThreadPool.ThreadsMin := 5; // 初始工作线程数 FThreadPool.ThreadsMax := 50; // 最大允许工作线程数 FThreadPool.OnProcessRequest := DealwithCommRecvData; // 线程工作函数(DealwithCommRecvData在工作者线程的Execute方法中被调用) // 使用线程池 var AWorkItem: TRecvCommDataWorkItem; // 继承自TWorkItem begin AWorkItem := TRecvCommDataWorkItem.Create; Move(PData[0], AWorkItem.FRecvData[0], PDataLen); AWorkItem.FRecvDataLen := PDataLen; FThreadPool.AddRequest(AWorkItem); // 向线程池分配一个任务 end;