原文:
...
type 
   TForm1=class(TForm);
   ...
   end;procedure test(p:pointer);stdcall    //--注意这个过程没有在TForm1中执行
begin
  //--我的处理过程 
end;procedure TForm1.onCreate(Sender:TObject);
var
  hThread,ThreadId:Dword;
begin
  hThread :=createThread(nil,0,@test,nil,0,ThreadId);
end;新的处理方式:
...
type 
   TForm1=class(TForm);
   ...
   public
     procedure test(p:pointer);stdcall;  //--我把处理线程放到TForm1中
   end;procedure TForm1.test(p:pointer);    //--注意这个过程在TForm1中执行
begin
  //--我的处理过程 
end;procedure TForm1.onCreate(Sender:TObject);
var
  hThread,ThreadId:Dword;
begin
  hThread :=createThread(nil,0,@test,nil,0,ThreadId);  //--错误在这里***
  //--错误提示没有需求的变量
end;我想高手们都看明白了吧,就是我要把TForm1外的线程写进TForm1内..

解决方案 »

  1.   

    没这样做过,不过我想这样的做法是不是不太正确,test是TForm1的一个部分,而你当作一个线程来运行,显然要将它从TForm1里独立出来。
    期待正确的处理方法......
      

  2.   

    第一个好像可行的吧,第二个不可行了吧。
    首先,只要是TForm1的成员函数,那么eax肯定是TForm1,也就是thisCreateThread的过成地址是一个标准的stdcall的函数。你可以新建一个线程类来实现也许更好一点吧
      

  3.   

    var FInstance: TFarProc;...
     FInstance :=  MakeObjectInstance(test);
     hThread :=createThread(nil,0,@test,nil,0,ThreadId);   ...
      

  4.   

    or 
    FInstance: Pointer;
      

  5.   

    type 
       TForm1=class(TForm);
         i : Integer;
       end;procedure test(p:pointer);stdcall    //--注意这个过程没有在TForm1中执行
    var
      fm : TForm1;
    begin
      //--我的处理过程 
      fm:=TForm1(p);
      //用 fm 访问当前TForm1的实例及成员
      //比如 fm.i=100;
    end;procedure TForm1.onCreate(Sender:TObject);
    var
      hThread,ThreadId:Dword;
    begin
      hThread :=createThread(nil,0,@test,self,0,ThreadId); //这里
    end;
      

  6.   

    to: myy() 
    我要建立同时建立n个(n>=1)TForm1.实例和线程,不知道你的处理方法可行吗?
      fm:=TForm1(p); ///--??????????????
      

  7.   

    同意myy(),它的方法是可行的,这就是ThreadProc原型中的参数的原意接点分
      

  8.   

    to: myy() 
    不行啊!
    我的程序不是用的TForm
    而是我自己建的类
    type
      TMyClass=class;
      protected
        construcator create();
      ..
      public
        setthreadrun;
      end;procedure test(p:pointer);stdcall    //--注意这个过程没有在TForm1中执行
    var
      fm : TMyClass;
    begin
      fm:=TMyClass(p);  //错误发生在这里,fm=nil 肯定有问题??????????????
      //--我的处理过程 
    end;constructor TMyClass.create();
    begin
      inherited create();
    end;procedure TMyClass.setthreadrun();
    var
      hThread,ThreadId:Dword;
    begin
      hThread :=createThread(nil,0,@test,nil,0,ThreadId);
    end;//--另外一个建立类的程序:
    uses uMyclass;
    procedure TForm1.button1onclick(sender:Tobject);
    var
      t:TMyclass;
    begin
      t:=TMyclass.create();
      t.setthreadrun;
    end;求救!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  9.   

    hThread :=createThread(nil,0,@test,self,0,ThreadId); //这里!!!!!!!!!!!!
      

  10.   

    你好好看看Delphi的TThread的源码吧,这是很 标准 的做法啊。
      

  11.   

    >>我想高手们都看明白了吧,就是我要把TForm1外的线程写进TForm1内..
    奇怪, myy 解決了你的問題???