function MyThreadFunc(P:pointer):Longint;stdcall;
var
page,allpage,i,j,n:integer;
username:string;
ifhave:boolean;
begin
form1.NMHTTP1.Get(form1.Edit1.Text);
form1.Memo1.Lines.Text:=form1.NMHTTP1.Body;
for i:=0 to form1.Memo1.Lines.Count-1 do
begin
form1.Memo2.Lines.Add(form1.Memo1.Lines.Strings[i])
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
hthread:=CreateThread(nil,0,@MyThreadFunc,nil,0,ThreadID);
if hThread=0 then
messagebox(Handle,'Didn’t Create a Thread',nil,MB_OK);
end;
当我关闭窗口时出现出现“无效的窗口句柄”的错误,应该怎样解决呢?是不是要先结束线程呢?
我有试过在关闭窗口前调用:
form1.NMHTTP1.Abort;
GetExitCodeThread(hthread,lpexitcode);
TerminateThread(hthread,lpexitcode);
但关闭窗口后,还是出现以上错误~~~大家知道怎样解决吗?或者可以提供能够在线程中实现以下代码的运行吗?
var
page,allpage,i,j,n:integer;
username:string;
ifhave:boolean;
begin
form1.NMHTTP1.Get(form1.Edit1.Text);
form1.Memo1.Lines.Text:=form1.NMHTTP1.Body;
for i:=0 to form1.Memo1.Lines.Count-1 do
begin
form1.Memo2.Lines.Add(form1.Memo1.Lines.Strings[i])
end;
end;
var
page,allpage,i,j,n:integer;
username:string;
ifhave:boolean;
begin
form1.NMHTTP1.Get(form1.Edit1.Text);
form1.Memo1.Lines.Text:=form1.NMHTTP1.Body;
for i:=0 to form1.Memo1.Lines.Count-1 do
begin
form1.Memo2.Lines.Add(form1.Memo1.Lines.Strings[i])
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
hthread:=CreateThread(nil,0,@MyThreadFunc,nil,0,ThreadID);
if hThread=0 then
messagebox(Handle,'Didn’t Create a Thread',nil,MB_OK);
end;
当我关闭窗口时出现出现“无效的窗口句柄”的错误,应该怎样解决呢?是不是要先结束线程呢?
我有试过在关闭窗口前调用:
form1.NMHTTP1.Abort;
GetExitCodeThread(hthread,lpexitcode);
TerminateThread(hthread,lpexitcode);
但关闭窗口后,还是出现以上错误~~~大家知道怎样解决吗?或者可以提供能够在线程中实现以下代码的运行吗?
var
page,allpage,i,j,n:integer;
username:string;
ifhave:boolean;
begin
form1.NMHTTP1.Get(form1.Edit1.Text);
form1.Memo1.Lines.Text:=form1.NMHTTP1.Body;
for i:=0 to form1.Memo1.Lines.Count-1 do
begin
form1.Memo2.Lines.Add(form1.Memo1.Lines.Strings[i])
end;
end;
因為呢thread中 都用到了窗口中的咚咚。。TerminateThread 需要看返回值。。
還有一般不要用TerminateThread 這個函數具體錯誤是什麼??
记着结束线程和释放线程,
把与Vcl通信的方法放在Synchronize()中