请教各位大虾几个问题:(0分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
N

netbug

Unregistered / Unconfirmed
GUEST, unregistred user!
1:下面的程序只有一个线程:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for I:=0 to 5000do
edit1.text:=inttostr(i);
end;
我想看到的是:edit1中的text属性在从小到大不停的变化,可我看到的是只有当程序结束时,
edit1中的text属性值为5000,而没有看到中间的变化值,如想看到中间的变化值,我该
怎么办?
2:以下的程序是有两个线程,当我按button1时,启动两个线程,当我按button2时,暂停线程1:
type
TMythread1=class(TThread)
procedure counter;
procedure Execute;override;
end;
procedure TMythread1.counter;
var i:integer;
begin
for i:=0 to 5000do
form1.edit1.text:=inttostr(i);
end;
procedure TMythread1.Execute;
begin
synchronize(counter);
end;

type
TMythread2=class(TThread)
procedure counter;
procedure Execute;override;
end;
procedure TMythread2.counter;
var i:integer;
begin
for i:=0 to 10000do
form1.edit2.text:=inttostr(i);
end;
procedure TMythread2.Execute;
begin
synchronize(counter);
end;
var
mythread1:TMythread1;
mythread2:TMythread2;
procedure TForm1.Button1Click(Sender: TObject);
begin
mythread1:=TMythread1.create(false);
mythread2:=TMythread2.create(false);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
mythread1.suspend;
end;
可是当我按button1启动两个线程后,立即按button2,程序不响应,一直到两个线程结束时才
响应button2,请问:这是为何?如何解决?
3:据说:线程是在后台运行的,那我想建两个或两个以上的线程,有一个在前台,其余在
后台,是否有什么方法?(如:我想建一个程序,是关于数据库录入、计算等。其中数据录入
必须在前台,而计算等放在后台,该如何做?)
谢谢。
 
1.
for I:=0 to 5000do
begin
edit1.text:=inttostr(i);
application.processmessages;
end;

2.
type
TMythread1=class(TThread)
i: Integer;
procedure counter;
procedure Execute;override;
end;
procedure TMythread1.counter;
begin
form1.edit1.text:=inttostr(i);
end;

procedure TMythread1.Execute;
begin
for i := 0 to 10000do
begin
synchronize(counter);
if terminated then
exit;
end;
end;

type
TMythread2=class(TThread)
i: Integer;
procedure counter;
procedure Execute;override;
end;
procedure TMythread2.counter;
begin
form1.edit2.text:=inttostr(i);
end;

procedure TMythread2.Execute;
begin
for i := 0 to 10000do
begin
synchronize(counter);
if terminated then
exit;
end;
end;

var
mythread1:TMythread1;
mythread2:TMythread2;
procedure TForm1.Button1Click(Sender: TObject);
begin
mythread1:=TMythread1.create(false);
mythread2:=TMythread2.create(false);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
mythread1.suspend;
end;

3. 录入直接用主进程就可以了, 只需要create一个计算的线程.
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
763
import
I
后退
顶部