0

次のコードは、INDY 10 tcpserver.onexecute() からのスレッドセーフな VCL 対話を許可するために使用されます。

///  a function to write information into a TBitmap 
TVclNavigationImage= procedure( ll, ur, ll_v , ur_v : TPoint ) of object;

TVCLUpdateNotify = class(TIdNotify)
 protected
 f_ll, f_ur, f_ll_v , f_ur_v  : TPoint;
 FProc: TVclNavigationImage;
 procedure DoNotify; override;
 public
 constructor Create(ll, ur, ll_v , ur_v : TPoint; aProc:TVclNavigationImage); reintroduce;
 class procedure UpdateNavigationWindow(ll, ur, ll_v , ur_v : TPoint ; aProc: TVclNavigationImage);
 end;

 class procedure TVCLUpdateNotify.UpdateNavigationWindow(ll, ur, ll_v , ur_v : TPoint ; aProc: TVclNavigationImage);
 begin
 with Create(ll, ur, ll_v , ur_v, aProc) do
     begin
     Notify;
     end;
end;

Oneexecute 関数には

procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
begin
    ....
    TVCLUpdateNotify.UpdateNavigationWindow(....)
    ....
 end;

MADSHI デバッガによると、serveronexecute() のこのコード行がメモリ リークを引き起こしています。クラス内に無料の関数はありません。そのコードのメモリリークをなくす方法は?

4

1 に答える 1

2

Indy 10 の最新バージョンを使用していることを確認してください。古いバージョンでTIdNotifyは、メモリ リークがありましたが、10 か月前に修正されました。

于 2012-11-22T00:21:42.920 に答える