Delphi XE,工作线程延迟与indy tcpclient导致异常

时间:2015-10-21 19:41:48

标签: multithreading delphi indy

我正在使用delphi从这个link

实现工作线程tecnic

我想要实现的是当调用延迟程序时,我需要向服务器发送TCP信号。

当我在XE2和XE7中编译此代码时,它工作正常,但内存逐渐缓慢增长。程序将在一周后挂起。

但是当我尝试在xe8中编译它时,它起作用了,但是它提升了

2:21:34:引发EAccessViolation错误,并显示消息:模块'form1.exe'中地址0063CA40处的访问冲突。读取地址00000000

如果我删除了idTCPclient它会正常工作。从延迟程序。

这是我的部分代码。

procedure TWorkerThread.Execute; 
begin 
  //doing alot of stuff here      

  delay2(Stop2, result, rond, Datetxt);

  //doing alot of stuff here also

  FreeOnTerminate := true; 

end; 


procedure TWorkerThread.delay2(i: TDateTime; h: string; r: string; d:     string);
var
  TimeUp: Boolean;
  T, comp: integer;
  a: string;
 OnTCP: TIdTCPClient;

begin
  TimeUp := False;
try
OnTCP := TIdTCPClient.Create(Nil);
try
  OnTCP.Host := '127.0.0.1';
  OnTCP.Port := 5000;
  OnTCP.Connect;

  While TimeUp = False do
  begin

    try
      comp := CompareDateTime(now, i);
    except
      on E: Exception do
        logging(E.ClassName + ' error raised, with message : ' + E.Message);
    end;

    if (comp = 1) then
    begin
      TimeUp := True;
    end
    else

    begin
      TimeUp := False;
      try
        T := SecondsBetween(now, i);
      except
        on E: Exception do
          logging(E.ClassName + ' error raised, with message : ' +
            E.Message);
      end;

      a :=  IntToStr(T);
      OnTCP.IOHandler.Write('OK' + h+d+r+a +   sLineBreak);

      TThread.Synchronize(nil,
        procedure
        begin // 1
          Form1.Label8.Caption := IntToStr(T);
        end); // 1
      sleep(700);

    end;

  end;
  OnTCP.Disconnect;
finally
  OnTCP.Free;
end;
 except
   on E: Exception do
     logging(E.ClassName + ' error raised, with message : ' + E.Message);
  end;
end;

任何帮助表示赞赏。

0 个答案:

没有答案