delphi线程池单元文件uThreadPool.pas,用法如下 type TRecvCommDataWorkItem=class(TWorkItem) public // updatetime,addtime:TDateTime; // orderid,ordertype,urljson,loadcount,savepath:string; url,Filename:string; total,order:Integer; _orderid:string; failedcount:Integer; IFCoverFile:Boolean; // 线程处理请求时触发的事件 procedure DealwithCommRecvData(Sender: TThreadsPool; WorkItem: TWorkItem; aThread: TProcessorThread); // 线程初始化时触发的事件 procedure TProcessorThreadInitializing(Sender: TThreadsPool; aThread:TProcessorThread); // 线程结束时触发的事件 procedure TProcessorThreadFinalizing(Sender: TThreadsPool; aThread:TProcessorThread); //任务队列空时触发的事件 procedure TQueueEmpty(Sender: TThreadsPool; EmptyKind: TEmptyKind); end; 先声明一个类 然后用法 FThreadPool := TThreadsPool.Create(nil); // 创建线程池 FThreadPool.ThreadsMin := 10; // 初始工作线程数 FThreadPool.ThreadsMax := 100; // 最大允许工作线程数 AWorkItem := TRecvCommDataWorkItem.Create; ISAllOverLoad:=False; AWorkItem.url:=urljson; AWorkItem.order:=i; AWorkItem.total:=JA.Count; AWorkItem.Filename:=savefilepath; AWorkItem._orderid:=orderid; AWorkItem.IFCoverFile:=IFCoverFile; FThreadPool.AddRequest(AWorkItem,True); // 向线程池分配一个任务 FThreadPool.OnProcessRequest := AWorkItem.DealwithCommRecvData; FThreadPool.OnThreadInitializing := AWorkItem.TProcessorThreadInitializing; FThreadPool.OnThreadFinalizing := AWorkItem.TProcessorThreadFinalizing; FThreadPool.OnQueueEmpty := AWorkItem.TQueueEmpty; 仔细看下线程池单元的函数说明轻松搞定。 procedure TRecvCommDataWorkItem.TQueueEmpty(Sender: TThreadsPool; EmptyKind: TEmptyKind); begin if EmptyKind=ekProcessingFinished then begin try if Assigned(geturl) then //存在的bug 如果下载文件存在的不行 begin //Sleep(200); //激活线程可能会发生在 休眠之前!! ISAllOverLoad:=True; if geturl.Suspended then //只有线程休眠了 才应该激活线程 否则不应该激活 geturl.Resume; end; finally end; end; end;
2023-04-13 14:54:51 28KB delphi线程池
1
在linux下运行的线程,学习线程和测试线程,以及创建线程池的开发贷代码,可以直接运行。
2023-04-10 16:08:48 55KB 线程、测试
1
C# 多线程 线程池 线程同步 单线程 线程的开始、挂起、恢复、结束、同步和异步
2023-03-15 16:30:00 53KB C# 多线程 线程池 线程同步
1
C#线程池 所有线程运行完毕,只是测试代码,用来弄清楚,打印信息很明确,适合初学者
2023-03-15 15:56:05 23KB C#线程池 等待 线程完毕
1
ThreadPool 线程池+任务队列
2023-02-04 16:56:17 9KB C++
1
linux线程池创建c实现 linux线程池创建c实现 linux线程池创建c实现 linux线程池创建c实现 linux线程池创建c实现 linux线程池创建c实现
2023-01-03 06:33:45 23KB linux线程池创建c实现
1
在基于linux(redhat)的开发环境下,使用VIM + gcc 实现多台机子之间的文件传输系统,其中一台做服务器。开发结果分为客户端和服务端,一个服务器连接多个客户端,使用数据线程池实现控制。传输过程基于TCP/IP 传输过程采用openSSL加密。测试传输快速稳定经测试支持jpeg mp3 exe可执行文件等传输并且传输无损坏。可以同时实现上传和下载。
1
ex3-Lidor Eliyahu Shelef的HTTP Server实现 http服务器根据客户端请求构造一个HTTP响应,然后构建并将响应发送给客户端。 重要文件: 服务器 线程池
2022-12-20 17:22:41 10KB C
1
Windows(VC6+doc)下C语言多线程聊天室,使用Socket套接字编程,具有多人聊天和私聊的功能,还支持断开重新连接,适合新手学习C语言Socket基础
2022-12-09 17:52:38 2.4MB C语言聊天室
1
多线程模板特点: 0).代码精简,新手易懂。 1).任务直进直出,占用内存较少。 (如果电脑内存小,最好别直接导入数据然后保存到变量,改成打开文件再读入效果更好) 2).如遇执行失败需要重试的任务直接压入队列 排队重试! (如果限制比较大的网站,账号登陆被限制IP了,在同一个IP子线程里面循环重试又浪费时间,不如试试揪出来扔后面排队重试吧)
2022-11-29 15:16:36 69KB 高级教程源码
1