program Project1;uses
  windows,, Dialogs, SysUtils;type
  MYPARA = record
    title: pchar;
  end;function MyThreadfunc(para: MYPARA): string;
begin
  createfile(pchar('U:\' + para.title + '.TXT'), GENERIC_WRITE, 0, nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);end;
var
  P: MYPARA;
  i:integer;
begin
  i := 123;
  P.title := pchar(inttostr(i));
  CreateThread(nil, 0, @MyThreadfunc, P, 0, ThreadID);  sleep(60000);
end.大概程序就是上面那样,我要怎么把参数I传递到MyThreadfunc函数中,

解决方案 »

  1.   

    MYPARA 结构当中再添加一个成员.
      

  2.   

    program Project1; uses 
      windows,, Dialogs, SysUtils; type 
      MYPARA = record 
        title: pchar; 
        str:pchar;
      end; function MyThreadfunc(para: MYPARA): string; 
    begin 
      createfile(pchar('U:\' + para.title + '.TXT'), GENERIC_WRITE, 0, nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); end; 
    var 
      P: MYPARA; 
      i:integer; 
    begin 
      i := 123; 
      P.title := pchar(inttostr(i)); 
      p.str:='sdfsf';
      CreateThread(nil, 0, @MyThreadfunc, @P, 0, ThreadID);   sleep(60000); 
    程序运行后出错
    end. 
      

  3.   

    var 
      P: MYPARA; //栈内存 
      i:integer; 
    begin 
      i := 123; 
      P.title := pchar(inttostr(i)); //栈内存(指IntToStr返回的串)
      p.str:='sdfsf'; //栈内存(对于这个常量串,就这样子理解吧,这个内存跟编译选项等有关系)
      CreateThread(nil, 0, @MyThreadfunc, @P, 0, ThreadID);   sleep(60000); 
    程序运行后出错 
    end. 由于上面使用的是栈内存,而线程执行是不会阻塞的,所以上面的函数就有可能先于线程的执行而执行结束.从而栈内存被释放,那么在线程当中操作的数据,不仅是结构当中的PChar,包括结构指针本身,都就变成了野指针