新手求助,一个关于多线程的问题(100分)

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

guaiguaizhang

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用一个动态数组做一个线程池
var
myThread : Array of TmyThread;
i : Integer;
...
begin
...
SetLength(myThread, 10);
for i:=0 to 9do
myThread := TmyThread.Creat(true);//编译通过,但执行到此就报错,不知道怎么回事
...
end;
 
上面這段代碼無問題.
應該是你的線程TMyThread有問題.把你的TMyThread類貼出來看看.
 
在你的线程中取消execute即可
 
为什么要取消Execute
取消后如何完成工作呢
 
不好意思,写错了,是取消create()过程
 
为什么
有参数需要create接收怎么办
 
参数在你建立线程时,就传进去啊,
传完后,用myThread.resume开始运行线程,你可以将create中的代码先放到execute中,试一下就知道,我以前也是出现这问题,后来就拿掉create就ok了,也许还有其他的方法,但我没有试过
 
问题是一般都用create接受参数
比如:
type
TmyThread = class(TThread)
private
myStringGrid : TStringGrid;
...
public
constructor create(mASG : TStringGrid);
end;

constructor TmyThread.create(mSG : TStringGrid);
begin
inherited Create(true);
myStringGrid := mSG;
end;

procedure TmyThread.Execute;
begin
...
synchronize(updateStringGrid);
end;

procesdure TmyThreadupdateStringGrid;
begin
...
end;

调用时
myThread := TmyThread.create(StringGrid1);
如果不用create怎样接受参数呢
能给出例子吗
谢谢
 
我一般这么写的,参数传递用property
type
TmyThread = class(TThread)
private
FmASG : TStringGrid;
...
public
property mASG: TStringGrid read FmASG write FmASG;

end;

myThread := TmyThread.create(true);
myThread.mASG := StringGrid1;
myThread.resume;

 
同意hotreg
参数传递用property是可以的
 
一楼说得对,问题应该在你的线程里边,上面的代码没问题。
参数在线程创建时传还是用属性传没什么区别
 
问题解决,多谢各位大虾.
 

Similar threads

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