And With this test ?

#include "hbmemory.ch"
#include "hbclass.ch"

#define MAXTEST 10

PROCEDURE MAIN()
   LOCAL n, ao, nMem, nTime

   REQUEST HB_GT_WIN

   // To load the class
   GetNew( 20, 20 )

   nTime := Seconds()
   nMem := Memory( HB_MEM_USED )
   ao := {}

   FOR n := 1 TO MAXTEST

      // Here we lost memory
      aAdd( ao, Problem() )
      ao[n] := Nil

      hb_gcAll( .T. )
      ? 'Mem used <- ' + AllTrim( Str( Memory( HB_MEM_USED ) ) )

   NEXT

   ao := nil
   hb_gcAll( .T. )

   ? "We lost " + AllTrim( Str( Memory( HB_MEM_USED ) - nMem ) ) + " Bytes"
   ? "Elapsed time " + AllTrim( Str( Seconds() - nTime ) )

RETURN

FUNCTION PROBLEM()
   LOCAL cValue := {'   '}
   LOCAL oMem1 := Mem():New()
RETURN Ctl():New( oMem1, cValue, 1, 'XXXX' )

CLASS Mem
   DATA aValues INIT {}
   DATA oFriend
   METHOD New( oFriend ) CONSTRUCTOR
   METHOD AddItem( oItem ) INLINE AAdd( ::aValues, oItem )
ENDCLASS

METHOD New( oFriend ) CLASS Mem

   IF ! Empty( oFriend )
      ::oFriend := oFriend
      oFriend:AddItem( Self )
   ENDIF

RETURN Self

CLASS Ctl
   DATA oFriend
   DATA oGet
   DATA uVal
   METHOD uValue( nVal ) BLOCK {|u| If( PCount() > 1, ::uVar[nVal] := u, 
::uVar[nVal] ) }
   METHOD New( oFriend, uVal, nPos, cPict ) CONSTRUCTOR
ENDCLASS

METHOD New( oFriend, uVal, nPos, cPict ) CLASS Ctl
   oFriend:AddItem( Self )
   ::oFriend := oFriend
   ::oGet    := GetNew( 20, 20, bSetGet( uVal, nPos ),, cPict )
RETURN Self

FUNCTION bSetGet( uVar, nVal )
RETURN {|u| If( PCount() > 1, uVar[nVal] := u, uVar[nVal] ) }




_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to