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就是乱码
不知道到底该如何写
请各位高人帮忙啊
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就是乱码
不知道到底该如何写
请各位高人帮忙啊
解决方案 »
- 第一次单独写个软件,请问需要注意些什么,希望有经验的给点建议少走点弯路,谢谢
- 怎样建立一个带记录型数据组参数的DLL函数
- 怎样实现多栏多项目报表
- 遇到了这样的错误 Runtime error 216 at ...如何处理,具体情况如下
- OleVariant是什么变量类型,怎样用
- 记录物理删除问题!
- 程序自动改变了DBComboBox控件的当前值,POST时为什么保存不了??
- 求助ADOQuery中数据选择的问题,高分,在线等
- 数据库访问技术有什么比较好呀?
- 编程思路问题请教
- delphi7 程序在xp及2000下正常运行但在windows 2003server 闪烁?急啊!高分了
- 北京工作,这样待遇如何
1、ThreadFunc应该为全局或者是类的静态函数。
2、如果要传递参数那么 threadfunc应该是stdcall方式调用
procedure threadfunc(lp: 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); 的前面去
如果是用API就得用指针,还得加上stdcall;而且记得指针指向的数据不能是局部的至少在线程运行的前面而且保证没被释放
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;