1,184
社区成员
发帖
与我相关
我的任务
分享
procedure mythread(pi:pinteger);stdcall;
var
i:integer;
begin
i:=pi^; //这里i是一个随机数,总是不能得到我传递过来的数值
showmessage(inttostr(i));
end;
procedure TMainForm.Button1Click(Sender: TObject);
var
hThread:Thandle;
ThreadID:DWord;
//pi:pinteger; //看到网上说有可能是局部变量的问题,我就把这pi改成全局变量了,还是不能解决问题
begin
new(pi);
pi^:=1;
hthread:=BeginThread(nil,0,@mythread,pi,0,ThreadID);
if hThread=0 then
begin
messagebox(Handle,'创建线程失败!',nil,MB_OK);
end;
end;
function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord; ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord; var ThreadId: LongWord): Integer;
TThreadFunc = function (Parameter: Pointer): Integer;
也就是线程函数调用约定是默认的pascal方式,不是stdcall方式。
procedure mythread(pi:pinteger);stdcall;
改
procedure mythread(pi:pinteger);