请问线程中的execte为什么不执行?(50分)

  • 主题发起人 主题发起人 ychy
  • 开始时间 开始时间
Y

ychy

Unregistered / Unconfirmed
GUEST, unregistred user!
请问线程中的execte为什么不执行?
unit Unit2;
interface
uses
Classes,Windows,Messages,Winsock,stdctrls,Gauges,Sysutils;
type
TSgFilter = class(TThread)
private
{ Private declarations }
protected
wparent:HWND;
// ftp:Tidftp;
mylistbox:TListbox;
procedure Execute;
override;
public
constructor create(sparent:HWND;Listbox:Tlistbox);
end;

implementation

constructor TSgFilter.create (sparent:HWND;listbox:Tlistbox);
begin

inherited Create(true);
Freeonterminate:=true;
mylistbox:=listbox;
wparent:=sparent;
resume;
end;

procedure TSgFilter.Execute;
var
I,j:integer;
begin
for i:=0 to mylistbox.Count - 1do
begin
j:=i+1;
end;
end;
end.
 
constructor TSingleFilter.create (sparent:HWND;listbox:Tlistbox);
begin

inherited Create(true);
//这里如果要创建后立刻执行应该改为False, 否则创建后需要调用Resume方法
Freeonterminate:=true;
mylistbox:=listbox;
wparent:=sparent;
resume;
//不能在这里调用, 因为这时对象还没有完全构造
end;
 
先问一下:
wparent:HWND;
是保存的 Parent 吗?
如果是的话,,你可以把你的线程类定义变成下面的形式试一试:
TSingleFilter = class(TThread)
private
{ Private declarations }
protected
wparent:TWinControl;
ftp:Tidftp;
mylistbox:TListbox;
procedure Execute;
override;
public
constructor create(sparent:TWinControl;var Listbox:Tlistbox);
end;

这段定义我在你的另外一个帖子中写了,,我顺便粘过来了 :)
 
我提个建议,不妨一试
将 type改为
type
TSgFilter = class(TThread)
private
{ Private declarations }
wparent:HWND;
// ftp:Tidftp;
mylistbox:TListbox;
protected
procedure Execute;
override;
public
constructor create(sparent:HWND;Listbox:Tlistbox);
end;

2。
 
你的 mylistbox.Count - 1=-1 当然不能执行了,改成别的就行了
 
把resume 放到create函数外面调用,试试
 
后退
顶部