比如我有这样一个过程
procedure thread1(x,y:integer);
begin
  x:= x+y;
end;然后我需要这个过程作为一个线程执行,你们这个参数应该怎么送过去
createThread(nil, 0, @Thread1, nil, 0, tid);
CreateTrhead没有送参数的地方呀

解决方案 »

  1.   

    若不使用类呢,直接API,是否有传递的方法?
      

  2.   

    好好看看,CREATETHREA是可以把参数传进去的。
      

  3.   

    在线程的购造时写呀。
    create(a ,b:String)
    begin
      ...
    end;
      

  4.   

    重写线程的CREATE事件.就是上位兄台所说的构造.
     constructor create(ASocket :TCustomWinSocket; AHandle :THandle);//定义
    constructor thdServerClient.create(ASocket: TCustomWinSocket; AHandle :THandle);
    begin
      FClientSocket := ASocket;
      FHandle       := AHandle;
      inherited create(false,TServerClientWinSocket(ASocket));
    end;
    上面就是个例子,这样重写后,参数就变成了两个.你可以同样加你想加的参数进去
      

  5.   

    比如我有这样一个过程
    procedure thread1(x,y:integer);
    begin
      x:= x+y;
    end;然后我需要这个过程作为一个线程执行,你们这个参数应该怎么送过去
    createThread(nil, 0, @Thread1, nil, 0, tid);
    CreateTrhead没有送参数的地方呀
      

  6.   

    比如我有这样一个过程
    procedure thread1(x,y:integer);
    begin
      x:= x+y;
    end;然后我需要这个过程作为一个线程执行,你们这个参数应该怎么送过去
    createThread(nil, 0, @Thread1, nil, 0, tid);
    CreateTrhead没有送参数的地方呀
    上面不小心打回车了,,引入第三个procdureprocedure procx;
    begin
      thread1(x,y:integer);
    end;createThread(nil, 0, @procx, nil, 0, tid);
    不就搞定啦
      

  7.   

    createThread(nil, 0, @procx, nil, 0, tid); 第四个参数就是参数的指针。注意这里不同于平时的参数要这样写。type  PWaitSend = ^TWaitSend;
      TWaitSend = record
        Buffer: String;
        WaitTime: Integer;
      end;procedure WaitSendThread(Ptr:PWaitSend);stdcall;
    begin
      try
        Sleep(Ptr^.WaitTime);   //使用刚刚传递的参数
        MySend(Ptr^.Buffer);//同上
      Except
        on E: Exception do
        begin
          AddLog('Error:WaitSendThread!'#13#10'Message:'+E.Message);
        end;
      end;
    end;procedure WaitSend(Buffer:String; WaitTime:Integer);
    var
      ThreadID: DWORD;
      Data: PWaitSend;
    begin
      New(Data); //Data是一个自定义类型,用它来传递参数
      Data^.Buffer:=Buffer;   //参数赋值
      Data^.WaitTime:=WaitTime; //同上
      CreateThread(nil,0,@WaitSendThread,Data,0,ThreadID); //创建线程
    end;