我在学多线程的时候编了一个测试程序,是用Delphi写的。编译通过了,但是运行的结果老是说函数ThreadProc中p指针为空,各位帮忙看看是怎么回事?
(由于我现在手上没有任何编译器,可能会有语法错误,但这不是我关心的问题,我关心的是为什么ThreadProc中的p指针问什么是0)unit unit1;Interfaceuses
windows,...;type
TForm1=class(TForm)
Button1:TButton;
procedure FormCreate(sendor:TObject);
private:
{private members}
public:
{public members}
end;//declaration of thread procedure
procedure ThreadProc(p:pointer);//Global variables
var
Form1:TForm1;
hThread:HThread;
ThreadID:DWORD;
p:pointer;implementationprocedure TForm1.FormCreate(sendor:TObject);
begin
GetMem(p,1);
pchar(p)^:='a';//对否?不管啦,反正不做也没关系 (#)
//创建一个线程,并挂起;
hThread:=CreateThread(nil,0,@ThreadProc,p,CREATE_SUSPENDED,ThreadID);
end;procedure TForm1.Button1Click(sendor:Tobject)
begin
//启动线程
ResumeThread(hThread);
end;procedure ThreadProc(p:pointer);
begin
if p=nil exit; (*)
.........
end;end.在(*)处就跳出,就是说p为nil,但是我在传递前,在(#)处看到的p却不是nil,这是怎么回事?
(由于我现在手上没有任何编译器,可能会有语法错误,但这不是我关心的问题,我关心的是为什么ThreadProc中的p指针问什么是0)unit unit1;Interfaceuses
windows,...;type
TForm1=class(TForm)
Button1:TButton;
procedure FormCreate(sendor:TObject);
private:
{private members}
public:
{public members}
end;//declaration of thread procedure
procedure ThreadProc(p:pointer);//Global variables
var
Form1:TForm1;
hThread:HThread;
ThreadID:DWORD;
p:pointer;implementationprocedure TForm1.FormCreate(sendor:TObject);
begin
GetMem(p,1);
pchar(p)^:='a';//对否?不管啦,反正不做也没关系 (#)
//创建一个线程,并挂起;
hThread:=CreateThread(nil,0,@ThreadProc,p,CREATE_SUSPENDED,ThreadID);
end;procedure TForm1.Button1Click(sendor:Tobject)
begin
//启动线程
ResumeThread(hThread);
end;procedure ThreadProc(p:pointer);
begin
if p=nil exit; (*)
.........
end;end.在(*)处就跳出,就是说p为nil,但是我在传递前,在(#)处看到的p却不是nil,这是怎么回事?
(由于我现在手上没有任何编译器,可能会有语法错误,但这不是我关心的问题,我关心的是为什么ThreadProc中的p指针问什么是0)unit unit1;Interfaceuses
windows,...;type
TForm1=class(TForm)
Button1:TButton;
procedure FormCreate(sendor:TObject);
private:
{private members}
public:
{public members}
end;//declaration of thread procedure
procedure ThreadProc(p:pointer);//Global variables
var
Form1:TForm1;
hThread:HThread;
ThreadID:DWORD;
p:pointer;implementationprocedure TForm1.FormCreate(sendor:TObject);
begin
GetMem(p,1);
pchar(p)^:='a';//对否?不管啦,反正不做也没关系 (#)
//创建一个线程,并挂起;
hThread:=CreateThread(nil,0,@ThreadProc,p,CREATE_SUSPENDED,ThreadID);
end;procedure TForm1.Button1Click(sendor:Tobject)
begin
//启动线程
ResumeThread(hThread);
end;procedure ThreadProc(p:pointer);
begin
if p=nil exit; (*)
.........
end;end.在(*)处就跳出,就是说p为nil,但是我在传递前,在(#)处看到的p却不是nil,这是怎么回事?
windows使用的是stdcall方式从右到左
delphi默认使用从左到右方式