假设是一个容量为iTotal=10的线程池,线程类为TYourThd,初始话如下:
procedure InitPool;
var aThd:TYourThread;
begin
for i:=1 to iTotaldo
begin
aThd:=TYourThread.Create(True);
//休眠态创建
WorkThdList.Add(aThd);
end;
使用时,建议你用轮训,查看每个thread的状态,决定启动哪一个:
function FirstAvaThd:TYourThread;
begin
for i:=0 to WorkThdList.Count-1do
if not TYourThd(WorkThdList.Items).Suspend then
Result:= TYourThd(WorkThdList.Items);
Exit;
end;
这样你就可以获得可用的线程指针了,当然,如果你想用ThreadID来驱动线程池,可以写成
function FirstAvaThd(aID:Integer):TYourThread
begin
...
if TYourThd(WorkThdList.Items).ThreadID = aID then
Result:= TYourThd(WorkThdList.Items);
...
end;
呵呵,写了这么多,不知道对你有用否,其实,架子就是这样了,将生成的Thread放到
TList里面,然后对Tlist.Items强制转换为tthread,就可以了,建议多看看TThread和
TList的文档