急!!!多线程问题.(200分)

H

hwy

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么开以同时开5个线程不停得去执行同一个认务。
最好一个例子。分不够再加。
 
也许是我没看明白题目.
但建立5个TThread后代的实例,分别Execute不就行了吗.
在OnTerminate里再开新线程就可以保证一直有5个小伙子在干活了.
 
可以给个例子吗?最好是线程数可以设置的.
 
自己写个线程控制类来管理,
 
const ThreadCount = 5;
proceduredo
ThreadTerminate(Sender: TObject);
begin
with ThreadExp.Createdo
begin
OnTerminate :=do
ThreadTerminate;
resume;
end;
end;

TThreadExp = class(TThread)
private
//
protected
procedure Execute;
override;
public
constructor Create;
destructor Destroy;
override;
end;

constructor TThreadExp.Create(TimeCount: integer);
begin
inherited Create(true);
FreeOnTerminate := True;
Priority := tpLower;
//
end;

destructor TThreadExp.Destroy;
begin
//
inherited;
end;

procedure TThreadExp.Execute;
begin
//线程工作代码
end;

procedure CreateThreads;
var
i: integer;
begin
for i := 0 to ThreadCount -1do
with ThreadExp.Createdo
begin
OnTerminate :=do
ThreadTerminate;
resume;
end;
end;
 
看我的例子。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TAddThread =class(TThread)
Flag:integer;
constructor Create(in_flag:integer);
procedure Execute;
override;
end;
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
{ TAddThread }
constructor TAddThread.create(in_flag:integer);
begin
inherited Create(True);
FreeOnTerminate:=True;
Suspended:=false;
Flag:=In_flag;
end;

procedure TAddThread.Execute;
var
i:integer;
begin
for i:=0 to 50do
begin
form1.Memo1.Lines.Add('Thread ['+inttostr(Flag)+'] line '+inttostr(i));
sleep(300);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
AddThread:TaddThread;
i:integer;
begin
for i:=0 to 4do
begin
AddThread:=TaddThread.Create(i);
end;
end;
end.

不好意思,多了FORMCREATE,我把它删除了。
 
to:Highpeak
你的例子我试了,到50就停了.有时还会冲突
有没有更好的办法呀.
 
to 特尔斐:
proceduredo
ThreadTerminate(Sender: TObject);
begin
with ThreadExp.Createdo
begin
OnTerminate :=do
ThreadTerminate;
//这个DoThreadTerminate在那里?
resume;
end;
end;
 
在主程序里定义,上面有啊
 
to:特尔斐
可以运行了.但如果我要它停下来要怎么做?
 
线程的Execute执行完毕就会释放(因为设置了 FreeOnTerminate := True;)
如果要手工停下来,就要调用你创建的每一个线程对象的Terminate方法,并在
Execute中作如下判断:
if Terminated then

break;
//退出循环
 
我要在主程序里手工停下来怎么做?
 
多人接受答案了。
 
顶部