问一个线程生成的问题(50分)

  • 主题发起人 jwmianzu
  • 开始时间
J

jwmianzu

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个unit里面写了一个类,它继承自TThread,这个unit还有一个form类。
TForm2 = class(TForm)
CoolBar1: TCoolBar;
...
end;

TMyThread=class(TThread)
protected
procedure Execute;
override;
constructor create;
end;
implementation
Constructor TMyThread.create;
begin
FreeOnTerminate := True;
inherited Create(false);
end;
procedure TMyThread.Execute;
begin
datamodule1.ADOCommand1.CommandText:='exec dt_jiaoyan';
datamodule1.ADOCommand1.Execute;
end;
我在一个按钮中起这个线程
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
MyThread.Create;
end;
编译可以通过但是点击按钮后会产生access violation 错误
这是为什么
请各位高手指点一下
 
晕死。。。
MyThread := TMyThread.Create(false);
 
您可以看看前面的构造函数,我重载了,不带参数的
 
我知道了,谢谢了,呵呵,我基础应该补补了
 
我想这样子也会有问题吧,VCL并不支持多线程,
这下面的两句话应该放到线程的另一个方法中吧
procedure TMyThread.MyMethod;
begin
datamodule1.ADOCommand1.CommandText:='exec dt_jiaoyan';
datamodule1.ADOCommand1.Execute;
end;
procedure TMyThread.Execute;
begin
Synchronize(MyMethod);
end;

这样调用才应该是安全的
 

Similar threads

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