CreateThread中参数的问题

fmonkey 2007-01-23 04:48:28
procedure TFrameDataManagerResult.RzCmbWellNumberChange(Sender: TObject);
var
TableName: string;
strInfo:string;
ThreadId:DWord;
PParameter:PChar;
begin
TableName := RzCmbWellNumber.Text;
strInfo:='正在画图中,请稍候....';
//SendMessage(Application.MainForm.Handle,ShowStatusPanel,1,Integer(@strInfo[1]));
//DrawJinShengJieGou(TableName);
//PParameter:=@TableName[1];
GetMem(PParameter,Length(TableName)+1);
StrCopy(PParameter,@TableName[1]);


//ShowMessage(String(PParameter));
ThreadHandle:=CreateThread(nil,0,@TFrameDataManagerResult.ThreadFunc,PParameter,0,ThreadId);
if ThreadHandle<> 0 then CloseHandle(ThreadHandle);

end;

procedure TFrameDataManagerResult.ThreadFunc(PParameter:PChar);
var
F:TextFile;
begin


AssignFile(F,'test1.txt');
Rewrite(F);
Writeln(F,PChar(PParameter));
CloseFile(F);
//MessageBox(Application.Handle,PParameter,'ddd',MB_OK);


end;

在传递那个PParameter时总是不对
到了ThreadFunc就是乱码
不知道到底该如何写
请各位高人帮忙啊
...全文
414 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wj19781215 2007-03-13
  • 打赏
  • 举报
回复
procedure TFrameDataManagerResult.RzCmbWellNumberChange(Sender: TObject);
var
TableName: string;
strInfo:string;
ThreadId:DWord;
PParameter:PChar;
begin
TableName := RzCmbWellNumber.Text;
strInfo:='正在画图中,请稍候....';
//SendMessage(Application.MainForm.Handle,ShowStatusPanel,1,Integer(@strInfo[1]));
//DrawJinShengJieGou(TableName);
//PParameter:=@TableName[1];
GetMem(PParameter,Length(TableName)+1);
StrCopy(PParameter,@TableName[1]);
//ShowMessage(String(PParameter));
ThreadHandle:=CreateThread(nil,0,@ThreadFunc,PParameter,0,ThreadId);
if ThreadHandle<> 0 then
CloseHandle(ThreadHandle)
else
FreeMem(PParameter);
end;

procedure ThreadFunc(PParameter:PChar);stdcall;
var
F:TextFile;
begin
if Not Assigned(PParameter) then
ExitThread(0);
AssignFile(F,'test1.txt');
Rewrite(F);
Writeln(F,PParameter);
CloseFile(F);
FreeMem(PParameter);
//MessageBox(Application.Handle,PParameter,'ddd',MB_OK);
end;
lxtnt 2007-02-17
  • 打赏
  • 举报
回复
这是以前遇到过的问题,如果不是直接调用API就可以用VCL的线程类继承Create创建事件,
如果是用API就得用指针,还得加上stdcall;而且记得指针指向的数据不能是局部的至少在线程运行的前面而且保证没被释放。。。。。。
大大怪老张 2007-02-12
  • 打赏
  • 举报
回复
procedure ThreadFunc(PParameter:PChar); stdcall ;
var
F:TextFile;
begin


AssignFile(F,'test1.txt');
Rewrite(F);
Writeln(F,PChar(PParameter));
CloseFile(F);
//MessageBox(Application.Handle,PParameter,'ddd',MB_OK);


end;


上面的函数放到
procedure TFrameDataManagerResult.RzCmbWellNumberChange(Sender: TObject); 的前面去
lonoaer 2007-01-25
  • 打赏
  • 举报
回复
有两个问题
1、ThreadFunc应该为全局或者是类的静态函数。
2、如果要传递参数那么 threadfunc应该是stdcall方式调用
procedure threadfunc(lp: PChar); stdcall;
fmonkey 2007-01-24
  • 打赏
  • 举报
回复
每人给各解答吗
我的问题其实怎么传递字符串参数

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧