使用Tthread线程类时如何控制线程数量?
时间:2011-12-12
来源:互联网
但是如何控制线程数量方面还有点疑问请教
TSearchThread = class(TThread)
//
end;
目前我的作法就是定制一个全局变量
var
I_ThreadCount: Integer; //线程数量
然后
//------- 线程类创建时
constructor TMyThread.Create()
begin
inherited Create(False);
InterlockedIncrement(I_ThreadCount); //线程计数+1
end;
//------- 线程类销毁时
destructor TMyThread.Destroy;
begin
InterlockedDecrement(I_ThreadCount); //线程计数-1
end;
这样来创建线程任务
with TMyThread.Create(S_Kw, S_WebFiletype) do
begin
end;
然后创建后循环判断这个线程数量 I_ThreadCount
超过数量就一直循环SLEEP
// 判断线程 来限制同时运行线程数量
while I_ThreadCount >= 9 do //限制线程数
begin
Application.ProcessMessages;
Sleep(10);
end;
百度了很多 都没看到是线程类是怎么控制线程数量的(线程池不会用)
我这个目前来看效果还行,就是感觉不是正道,
不知道大家是怎么控制线程数量的?
特此请教
作者: ADSLAN 发布时间: 2011-12-12
作者: kaikai_kk 发布时间: 2011-12-13
作者: bdmh 发布时间: 2011-12-13
作者: funxu 发布时间: 2011-12-13
主要是 判断线程数然后循环那地方感觉不正规.
作者: ADSLAN 发布时间: 2011-12-13
作者: Harryfin 发布时间: 2011-12-13
应该是通过 thread,写一个的类方法 class function CreateMyThread():thread;来创建,将 构造 函数 私有化,这样,如果到上限了就不与分配,或者说维护一个任务队列,空下来的线程到队列中取任务,也省去了重复创建线程的资源消耗。
作者: chhrsas 发布时间: 2011-12-13
1、定义一个结构体
ThreadList = Record
ThreadHwndList:TStrings; //线程句柄列表(可以方便的控件线程)
ThreadCount:Integer; //线程总数量
... //如果有其他需要记录的继续写
end;
2、创建线程时判断ThreadCount的数量。
3、创建时ThreadCount + 1; 结束时ThreadCount -1;
这是一个最简单的东西了。要真正使用还需要好好考虑一下,方法应该很多。
作者: nm_wyh 发布时间: 2011-12-13
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28