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
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour