我正在使用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;
任何帮助表示赞赏。