简单的多线程问题,解决后立即结贴!! ( 积分: 100 )

  • 主题发起人 主题发起人 grj1
  • 开始时间 开始时间
G

grj1

Unregistered / Unconfirmed
GUEST, unregistred user!
单击stop,总是报内存冲突错误
单元A:
var
I:Integer;
procedure TMyThread.Execute;
begin
I:=0;
while not terminateddo
begin
Synchronize(ShowData);
sleep(100);
I:=I+1;
end;
end;

procedure TMyThread.ShowData;
begin
Form1.Memo1.Lines.Add(IntToStr(I));
end;

单元B(窗体):
procedure TForm1.Button1Click(Sender: TObject);
var
myt:TMyThread;
begin

if Button1.caption='start' then
begin
begin
myt:= TMyThread.Create(true);
myt.FreeOnTerminate:=true;
myt.Resume;
Button1.caption:='stop';
end;
end
else
begin
myt.Terminate;
Button1.caption:='start';
end;

end;
 
单击stop,总是报内存冲突错误
单元A:
var
I:Integer;
procedure TMyThread.Execute;
begin
I:=0;
while not terminateddo
begin
Synchronize(ShowData);
sleep(100);
I:=I+1;
end;
end;

procedure TMyThread.ShowData;
begin
Form1.Memo1.Lines.Add(IntToStr(I));
end;

单元B(窗体):
procedure TForm1.Button1Click(Sender: TObject);
var
myt:TMyThread;
begin

if Button1.caption='start' then
begin
begin
myt:= TMyThread.Create(true);
myt.FreeOnTerminate:=true;
myt.Resume;
Button1.caption:='stop';
end;
end
else
begin
myt.Terminate;
Button1.caption:='start';
end;

end;
 
我没有具体帮你看,也没有调,不过
1 myt.FreeOnTerminate:=true;
对应的onterminate事件怎么没有?
2、Form1.Memo1.Lines.Add(IntToStr(I));a单元a还要引用b单元,
你不觉得丑陋吗,为什么不建立一个fmemo:tmemo的成员,然后create的时候传送进去!

`
 
我晕!!
var
myt:TMyThread;
你这个变量是定义为局部变量。你按start时,创建了线程。而你按stop时,还没给线程变量赋值就调用,当然出错呀。你把他提到unit1里做全局变量吧。
 
我也晕,怎么能这么搞?
 
谢谢诸位,我以前搞java的,临时用delphi,比较生!
 
后退
顶部