原文:
function  myfunc(param: Pointer):LongInt;StdCall;
begin
  Form1.Edit2.Text := string(param^);
  //showmessage(str);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  hThread:Thandle;//定义一个句柄
  ThreadID:DWord;
  str : string;
begin
  str := Form1.Edit1.Text;
//创建线程,同时线程函数被调用
  hthread:=CreateThread(nil,0,@myfunc,@str,0,ThreadID);
  if hThread=0 then
  messagebox(Handle,PChar('Didn’tCreateaThread'),nil,MB_OK);
end;
我怎么得到的是?

解决方案 »

  1.   

    我就想用线程调用一个方法,需要传递一个string变量就行应该怎么作
      

  2.   

    str是一个局部变量,执行完button1click后已经被释放了
    定义一个全局变量就好了
    还有string指针最好用PChar,用pointer强制转换好像有点问题
      

  3.   

    1、可以把String 内存指针通过MSG发送运去。
    2、另一个String 处理最好用Pchar在效率上也较好。
    3、多线程要注意对String 保护,因为传的是指针,如果在某一线程里进行处理,就会影响字符串值(注意处理值是的锁定)
    =====
    分享快乐:www.delphichm.com