最近学线程,有一个函数不知如何用?(50)

  • 主题发起人 主题发起人 hying95
  • 开始时间 开始时间
H

hying95

Unregistered / Unconfirmed
GUEST, unregistred user!
自定义个类型:type RDate=record Arg: Integer;
arry: array of string;
end;
var hThread:Thandle;//定义一个句柄 ThreadID:DWord;function MyThreadFunc(P:pointer):RDate;stdcall;var i:longint;
N: Integer;
begin
N:=Integer(p^);
SetLength(Result.arry,N);
for i:=0 to Result.Arg-1do
Result.arry:=IntToStr(i);
end;
procedure TForm1.btn1Click(Sender: TObject);var p: Pointer;
i: Integer;
PDate: RDate;
begin
i:=StrToInt(Edit1.Text);
P:=@(I);
//我要创建一个线程,并把Edit1中输入的数字传进我的线程函数,如何得到然后得到返回结果,用Edit2.text:=PDate.Arry[0]结果, hthread:=CreateThread(nil,0,@MyThreadfunc,P,0,ThreadID);
//EDIT2如何得到结果?end;
 
用线程类 TThread 吧,TThread.WaitFor后可以得到 ReturnValue
 
同时也想学习无类型指针TThread好象比API麻烦是不是这样也不行,编译可以过,点按纽出错procedure TForm1.btn2Click(Sender: TObject);var p: Pointer;
i: Integer;
AA: RDate;
begin
i:=StrToInt(Edit1.Text);
P:=@(I);
AA:= MyThreadfunc(P);
Edit2.Text:=AA.Arry[0];
end;
 
........那还是先学好指针再搞这个吧。
 
白大侠,如果用API我上面那个函数该如何用,能否帮忙看看?
 
话说,你的回调函数本来就定义错了..线程的回调函数的返回值是一个4BYTE的数值型..当然,你可以返回指针,但是你返回结构类型就不合规定了.要么返回一个指针,要么作为变参传进去取返回值是getthreadexitcode
 
我本来想返回一个字符列表,不知怎么弄,才定义一个类型
 
后退
顶部