constructor TThreadgetXML.Create(XMLDoc: TXMLDocument; lblIssue, lblMiniteSecond: TLabel);
begin
  flblIssue := lblIssue;
  flblMiniteSecond := lblMiniteSecond;
  fXMLDoc := XMLDoc;
  inherited Create(True);
end;procedure TThreadgetXML.Execute;
begin
  try
    fIdAntiFreeze1 := TIdAntiFreeze.Create(nil);
    fIdHTTP1 := TIDHTTP.Create(nil);
    fIdAntiFreeze1.OnlyWhenIdle := False;    fXMLDoc.XML.Text :=
      fIdHTTP1.Get('http://219.142.177.16:8381/ripado/sale.xml');
    fXMLDoc.Active := true;
    flblIssue.Caption := GetIssue;
    fEndTime := strToInt(GetEndTime);
    Synchronize(SynChangeTime);    if assigned(fIdAntiFreeze1) then
      freeAndNil(fIdAntiFreeze1);
    if assigned(fXMLDoc) then
      freeAndNil(fXMLDoc);
    if assigned(fIdHTTP1) then
      freeAndNil(fIdHTTP1);
    Suspend;
  except
    strMsg := '网络连接错误!';
    Synchronize(SynAddInfo);
  endend;
显示窗体时我已经创建计时器中调用
 if endTime <= 60 then
  begin
  //  if not assigned(ThreadgetXML) then
  //  ThreadgetXML := TThreadgetXML.Create(xmlDoc, lblissue, lblminiteSecond);
    ThreadgetXML.Resume;
  end
  else
    if not tmrCountDown.Enabled then tmrCountDown.Enabled := true;第二次调用就出错了,excute代码上的部分说什么也不会被执行,请大大们帮我!

解决方案 »

  1.   

    出了个地址错误,运行不到excute
      

  2.   

    唉,真没法说你了.在群里问的没完,在这居然也能看到你.看来你真的是问遍了大江南北!
    inherited Create(True);这个是把线程挂起了.
    要想线程序马上执行需要 inherited Create(false);
    不过,你的代码有问题:
    应该写成
    constructor TThreadgetXML.Create(XMLDoc: TXMLDocument; lblIssue, lblMiniteSecond: TLabel);
    begin
      inherited Create(True);
      flblIssue := lblIssue;
      flblMiniteSecond := lblMiniteSecond;
      fXMLDoc := XMLDoc;
      resume;
    end;
      

  3.   

    if endTime <= 60 then
      begin
          ThreadgetXML.Resume;// := TThreadgetXML.Create(xmlDoc, lblissue, lblminiteSecond);
      end程序里执行是这样写么?还是没有执行到excute
      

  4.   

    关键在于Execute执行体,这里应该有个循环,否则Suspend之后线程就会自动结束了。如下:procedure TThreadGetXML.Execute;
    begin
      while not Terminated do
      try
        ...
      except
        ...
      end;
    end;
      

  5.   

    Create函数中加上这个:FreeOnTerminate := False;
      

  6.   

    在Excute中加
    while 1=1 do
    begin//你的代码;
    end;
      

  7.   

    procedure TThreadgetXML.Execute;fIdHTTP1 := TIDHTTP.Create(nil);<-放到TThreadgetXML.Create中
    去掉fIdAntiFreeze1
    尽量别用Synchronize,用postmessage消息通知界面或者在主界面用Timer刷新数据。