如何给线埕函数传递参数??? ( 积分: 20 )

  • 主题发起人 主题发起人 lizi_you
  • 开始时间 开始时间
L

lizi_you

Unregistered / Unconfirmed
GUEST, unregistred user!
我是用CreateThread开启一个线程,然后想给调用的线程函数传递参数,可是,当我调用线程函数时,发现参数并没有被传递给函数????????????
 
我是用CreateThread开启一个线程,然后想给调用的线程函数传递参数,可是,当我调用线程函数时,发现参数并没有被传递给函数????????????
 
你可以在createthread的时候往里传参数
 
我传了,可是线程函数中的参数值是空的??
 
TOpenWeb=class(TTHread)
private
URL:string;
Param:integer;
public
constructor Create(TempURL:string;AParam:integer);
procedure Execute;override;
end;
 
将参数申明成全局变量看看
 
参数是声明的全局变量;
程序大致如下:
//声明结构
type
PMyThread = ^TMyThread
TMyThread = redcord
info_len: integer;
end;

//声明
var
hThread: Thandle;
ThreadID: DWord;
MyThread: PMyThread;
//初始化参数
new(MyThread);
MyThread^.info_len := 100;
//创建现程
//MyThread是要传递给MyThreadFunc线程函数的参数
hThread := CreateThread(nil,0,@MyThreadFunc,MyThread,0,ThreadID);
//线程函数
function MyThreadFunc(MyThread: PMyThread): variant;stdcall;
begin
...
end;

//现在只要把stdcall改成safecall参数值就可以取得;
//原因我不知道;
//我想请问:
stdcall和safecall是什么????
为什么要在函数后加上这个???
 
还有就是在上述的线程函数中,不能对窗体上控件的属性作修改??
如在上述的线程函数中我添加:
Form1.Edit1.Visible := false;
时,程序会报错??
请问在线程中是否不能对窗体上控件的属性作修改呢???????????????
 
问题可能在函数的返回值
function MyThreadFunc(MyThread: PMyThread): dword;stdcall;
stdcall和safecall是参数传递的约定,safecall和stdcall基本差不多,只不过safecall编译器加了异常保护,安全一些。具体参照safecall的帮助
 
为什么线程函数的返回值的类型设置成dword类型呢??
 
晕,怎么不看看帮助呢?
lpStartAddress
The starting address of the new thread. This is typically the address of a function declared with the WINAPI calling convention that accepts a single 32-bit pointer as an argument and returns a 32-bit exit code. Its prototype is:
DWORD WINAPI ThreadFunc( LPVOID );
 
将线程函数的返回值类型改成dword;
程序出现警告:
Return value of function 'MyThreadFunc' might be undefined.
 
多人接受答案了。
 
后退
顶部