procedure TForm1.Url_Check;
var
  paralist:Tstringlist ;
  s1:TStringStream ;
  t:string ;
begin
  paralist := Tstringlist.Create ;
  s1 := TStringStream.Create('');
  PARALIST.ADD('shuaishuai='+shuaishuai) ;     //shuaishuai 是一个全局变量
  try
    idhttp1.Post('http://www.cctv.com/check/Check.Asp', paralist, s1) ;
    t := s1.DataString ;
  finally
    paralist.Free ;
    s1.Free ;
  end;
  if t = '3' then
  begin
    form1.Label14.Caption := '版本过老,须要更新' ;
    showmessage ('版本过老,须要更新,重新打开一次就OK了') ;
    Application.Terminate ;
    Winexec(pchar(RootFile+'updata.exe'),sw_normal) ;  //调用外部升级程序,进行强制更新
  end;
end ;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Url_Check ;
end;
主窗体是这样设计的,大意是,一个TIMER1,每一秒执行一次Url_Check 进行网络验证如何把这个功能写进线程去执行,因为有时网络比较慢时,程序会出现无响应的情况,
还有时会出现一个SOCKE错误框,意思就是网络连接有错谁能帮我写这个线程类,我对线程知识一无所知,还请朋友们帮忙。

解决方案 »

  1.   

    你不会把强制更新放到软件登陆前执行吗?每次登录的时候先检查版本,版本不一致九强制更新。个人认为这样比你用Timer和线程要省系统资源。
      

  2.   

    创建一个线程
    把你的功能代码放到线程当中,然后再timer里面执行线程
      

  3.   

    定义一个线程类
       type
        TRequestURL=class(TThread)
        protected
           procedure Execute;override;
        end;
    将你的Url_Check代码加到线程的Execute方法里,再通过TRequestURL.Create(False)调用线程。
      

  4.   

    回楼上,这样的话,我发现程序的句柄会随着TIMER的每一次执行,加1.
    这个有什么负面影响吗?
      

  5.   

    别急着使用线程的方式,先在FORM上面放一个IdAntiFreeze控件.
    如果这样效果不理想,再考虑用线程.
      

  6.   

    别急着使用线程的方式,先在FORM上面放一个IdAntiFreeze控件.
    如果这样效果不理想,再考虑用线程.
    这个方法如何使用???我的INDY  现在的版本是9.00.18
    还望告知呀
      

  7.   

    楼上的,能帮忙吗?付RMB也行呀....
      

  8.   

    先考虑一下,有必要用线程吗?就只重复一个单一过程,没必要吧,用TIMER就够了。
    1,至于有时网络比较慢时,程序会出现无响应的情况,可以设个TIMEOUT,过时就重新查询,
    2,有时会出现一个SOCKE错误框,意思就是网络连接有错吗,用TRY .....EXECPT