procedure TForm1.Timer1Timer(Sender: TObject);  //这是一个次过程的TIMER
begin
  Check ;
end ;procedure TForm1.Check;                         //这是调用的一个IDHTTP的POST过程
var
  paralist:Tstringlist ;
  s1:TStringStream ;
begin
  paralist := Tstringlist.Create ;
  s1 := TStringStream.Create('');
  PARALIST.ADD('na='+na) ;      //全局变量,已经获得此值
  PARALIST.ADD('pa='+pa) ;      //全局变量,已经获得此值
  try
    idhttp2.Post('http://www.csdn.net/Check.Asp', paralist, s1) ;  //用IDHTTP的POST来获得远程HTML代码
    form1.memo1.text := s1.DataString ;
  except
  end;
  paralist.Free ;
  s1.Free ;
  //......以下是检测返回的HTML状态代码
end ;
问题:这个timer1要根据主界面的运行状态来随时激活,有时一分钟,有时十分钟,时间不定;
      我现在想要在这个CHECK运行时,不影响我主界面的工作,即这个CHECK能不能以独立于主界面的形式来工作。
可否做成一个线程,如何做?如何调用?

解决方案 »

  1.   

    界面这样调用线程
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      mythread : TIdhttppost;
    begin
      mythread := TIdhttppost.Create(false);
    end;
    线程:
    unit Unit2;interfaceuses
      Classes;type
      TIdhttppost = class(TThread)
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;implementationuses Unit1;      //注意引用全局变量参数模块
    procedure TIdhttppost.Execute;
    var
      paralist:Tstringlist ;
      s1:TStringStream ;
    begin
      FreeOnTerminate := True;
      { Place thread code here }
      paralist := Tstringlist.Create ;
      s1 := TStringStream.Create('');
      PARALIST.ADD('na='+na) ;      //全局变量,已经获得此值
      PARALIST.ADD('pa='+pa) ;      //全局变量,已经获得此值
      try
        idhttp2.Post('http://www.csdn.net/Check.Asp', paralist, s1) ;  //用IDHTTP的POST来获得远程HTML代码
        form1.memo1.text := s1.DataString ;
      except
      end;
      paralist.Free ;
      s1.Free ;
      //......以下是检测返回的HTML状态代码end;end.
      

  2.   

    form1.memo1.text := s1.DataString ;
    这一句不能放在线程里面,会导致不可知的异常。把这句话封装到线程的一个过程中,然后通过Synchronize()来调用。