想要给线程函数传两个参数,
不知道怎么传不进去,
麻烦帮忙看看了。还有,多线程的程序怎么调试?谢谢啦!function Th_fun_2(p_par: PPar): Integer; stdcall;
var
  I: Integer;
begin
  for I := 1 to p_par.para1 do
    begin
      Form1.mmo1.Lines.Add(p_par.para2);
    end;  Result := 0;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
  p: PPar;
  a: par;
  ThreadID: DWORD;
  hThread: THandle;
begin
  a.para1 := 5;
  a.para2 := 'NTU';  p := @a;  hThread := CreateThread(nil,
                          0,
                          @Th_fun_2,
                          p,
                          0,
                          ThreadID);
end;

解决方案 »

  1.   

    type
      Par=packed record
         para1 : Integer;
         para2 : String[20];
      end;
      PPar = ^Par;function Th_fun_2(p_par: PPar): Integer; stdcall;
    var
      I: Integer;
    begin
      for I := 1 to p_par^.para1 do
      begin
        Form1.memo1.Lines.Add(p_par^.para2);
      end;  Result := 0;
    end;
    var
        a: par;     //这个必须改成全局的。你为果不改成全局的。一但函数执行完毕。那么他就会 删除这个变量。线程中就会引用一个空地址!
        //你 错就错在这儿。 记住线程传参数 是传的一个地址,地址中是什么类型由你控制就行了。如果你想动态来做。那你可以在下面。直接 new 一个地址就行了。这样也行
        //但你记得在线程中你要 回收这个内存。不然 会有内存泄露。。

    procedure TForm1.Button1Click(Sender: TObject);
    var
      p: PPar;
      ThreadID: DWORD;
      hThread: THandle;
    begin
      a.para1 := 5;
      a.para2 := 'NTU';  p := @a;  hThread := CreateThread(nil,
      0,
      @Th_fun_2,
      p,
      0,
      ThreadID);
    end;
      

  2.   

    var
      p: PPar;
      a: par;
      ThreadID: DWORD;
      hThread: THandle;
    begin
       NEW(P);
       P^.para1 := 5;
       P^.para2 := 'NTU';hThread := CreateThread(nil,
      0,
      @Th_fun_2,
      p,
      0,
      ThreadID);   就可以传进去了,但需要你自己释放
      

  3.   

    直接继承TThread来完成不是很简单?添加类成员,然后在Execute当中使用。成员相关的的数据内容也可以在Create构造函数当中传进去。要不然自己在外面申请了一个结构体指针,到头来还需要考虑释放的问题,不是自己给自己找麻烦?
      

  4.   

    不推荐用CreateThread,而用BeginThread方法。BeginThread对CreateThread进行了封装。
    参数的指针在工作线程中一定要有效才行,就是其生命期还未结束。
    不一定要用全局变量,也可以是对象实例,要保证在工作线程执行完前没有释放。
      

  5.   

    同意unsigned 的说法,既然delphi给你封装了类,为什么不用?