请教如果创建向Netant那样的5个线程,当一个线程完了的时候自动再创建一个(50分)

  • 主题发起人 主题发起人 ashow
  • 开始时间 开始时间
A

ashow

Unregistered / Unconfirmed
GUEST, unregistred user!
就像Netant那样,一开始创建了5个线程,等一个线程完成后自动再创建一个。
请教思路。谢谢。
 
当线程释放的时候,触发一个事件,该事件统计线程数量,如果低于某个值,就新建一个线程了!
 
请问用什么方法可以统计进程数量
 
在窗体上添加一个变量,在线程创建和释放的事件中,分别对该变量加减1,即可!
type
TForm1 = class(TForm)
private
FThreadCount: Integer;
procedure SetThreadCount(const Value: Integer);
{ Private declarations }
public
{ Public declarations }
property ThreadCount : Integer read FThreadCount write SetThreadCount;
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.SetThreadCount(const Value: Integer);
begin
if FThreadCount = Value then
Exit;
FThreadCount := Value;
if FThreadCount < 5 then
begin
with TThread.Create(False)do
begin
..............
end;
end;
end;
 
方法一
实现Thread的onTerminate事件,每次事件触发,就开始一个新的。记住,FreeOnTerminate必须是False,这样的话在OnTerminate的时候就可以使用Thread中的Field和Property。
方法二
作两个线程,其中一个是管理线程,另外一个做一个ThreadList。在管理线程中循环遍历ThreadList(每次遍历之后sleep一段时间,否则的话子线程的效率会很低的)。发现有完成的就重新开始。
方法三
结合前两种方法,但是管理线程不对ThreadList进行遍历,而是在Terminate的时候对ThreadList中的子线程进行终止和释放。
 
帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com

╰=========================================╯
 
多人接受答案了。
 
后退
顶部