Page 1 of 2

Mi App se cuelga (SOLUCIONADO, bueno eso creo)

PostPosted: Thu Nov 12, 2015 2:19 am
by Armando
Amigos del foro y Antonio:

Tengo una aplicación y en especial un PRG que después de entrar y salir varias veces a él
la aplicación se cuelga con el famoso error LA APLICACION XXXXX HA DEJADO DE FUNCIONAR
y hay que cerrar el programa.

Deduzco que puede ser que algunos recursos se me quedan sin eliminar.

Cómo puedo saber que recursos se quedan en memoria?

Saludos

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 7:03 am
by cnavarro
Armando, al principio de la aplicacion

Code: Select all  Expand view

   SetResDebug( .T. )
 


y antes de salir

Code: Select all  Expand view


.../...

   if File( "checkres.txt" )
      FErase( "checkres.txt" )
   endif
   CheckRes()

return nil
 

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 11:41 am
by karinha
Code: Select all  Expand view

FUNCTION FINALIZA()

    DBCLOSEALL()

    FreeResources() // Set Resources To

    Release All
    SysRefresh()

    /*limpia arreglo y llama al colecor de basura de xharbour*/ //-> Lixeira
    HB_GCALL( .T. )

    CLEAR MEMORY

    PostQuitMessage( 0 )

    __QUIT()

RETURN NIL
 



Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 12:07 pm
by MarioG
Karinha;
muchas gracias por compartir el código!!
en mi EXIT PROCEDURE, luego de CLOSE ALL solo uso SET RESOURCES TO!

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 1:30 pm
by hmpaquito
Al terminar un programa, es Windows el que recupera la memoria totalmente.
A mi modo de ver el procedimiento de salida solo necesita esto y en este orden:
Code: Select all  Expand view
FUNCTION FINALIZA()
 
    PostQuitMessage( 0 )
    SysRefresh()

    DBCLOSEALL()

    __QUIT()

RETURN NIL

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 2:55 pm
by Armando
Amigos foreros:

Como decía Jack "El destripador", vamos por partes.

Primero debo aclarar que el problema es en un PRG, no en el PRG Main(), es decir
es en un PRG que forma parte de la aplicación, entro y salgo varias veces de ese PRG
y truena. Otra cosa, utilizo tablas de MySql.

Cristóbal:
Puse el código que sugieres en el PRG del problema y no me crea fichero alguno.
también ya lo puse en el MAIN y tampoco me crea el fichero.

hmpaquito:
Con tu sugerencia al salir del PRG me saca de toda la aplicación, quite las líneas
PostQuitMessage( 0 ) y
__QUIT()

Ya no sale de la aplicación pero el problema persiste.


karinha
Se presenta la misma situación que con la sugerencia de hmpaquito.

Mario:
No puedo usar el SET RESOURCES TO porque tengo una variable de
tipo MEMVAR que también la cierra y al volver a entrar al PRG dicha
variable ya no existe :(

Alguna otra idea?

Saludos

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 2:57 pm
by armando.lagunas
estimados:

Creo que el problema no es en la salida del sistema, si no que se cuelga estando en ejecusión, tube ese problema, yo use el administrador de tareas de windows para revisar el consumo de memoria de mi aplicación, me di cuenta de que esa memoria no se liberaba cuando salía de los procedimientos de cada "prg" que tenía y que al final colapsaba al ir aumentando esos megas en uso de memoria.

la solución a esto fue colocar al comienzo de cada prg el Hb_GCall( .T. ) y al salir de ese prg la instrucción MemoryFlush(), con esto el administrator de tareas de windows me informaba la liberación de esa memoria que ocupaba en ese procedimiento, y mi aplicación se estabilizó, sin darme los problemas de cuelgue y de recursos.

no sé si ésta sea una solución adecuada, pero a mi me funciona hasta el momento.

saludos.

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 3:03 pm
by karinha
Armando, muestra como estás haciendo. poste el código fuente. Saludos.

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 3:10 pm
by Armando
Tocayo:

Gracias por el apoyo, uso xHarbour y parece que la función MemoryFlush() no es de xHarbour,
me la reclama el compilador. Tendré que pasarme a Harbour??

Saludos

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 3:23 pm
by Armando
karinha

A ver si me explico:

Código del Main()

Code: Select all  Expand view

FUNCTION Main()
...
...
RETURN(.T.)

...
MENUITEM aSubM1[01] PROMPT "&Paileria" ;
    RESOURCE "CotP16" ;
    ACTION SicWin1a(oWindow) ;
    MESSAGE "Registrar e imprimir cotizaciones PAILERIA"
...
RETURN(oMenu)
 


Este código es parte del SicWin1a() PRG, aquí es donde la aplicación se cuelga

Code: Select all  Expand view

MEMVAR oApp
FUNCTION SicWin1a(oWindow)
...
    DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-10
    DEFINE ICON oIcono RESOURCE "AppLogo"
    DEFINE WINDOW oWnd MDICHILD OF oWindow FROM 0,0 TO 10,10;
        TITLE "Relación de cotizaciones PAILERIA del mes" ICON oIcono

        oWnd:bGotFocus  = { || oBrw:SetFocus() }

        DEFINE DIALOG oDlg RESOURCE "BrwCpa" OF oWnd FONT oFont ICON oIcono;
            BRUSH oApp:oBrush TRANSPARENT
....
....
...
...
        ACTIVATE DIALOG oDlg NOWAIT ON INIT oDlg:MOVE(0,0) VALID ! GetASyncKey(VK_ESCAPE)
    ACTIVATE WINDOW oWnd ON RESIZE ( IF( oWnd<>NIL, oWnd:SETSIZE(oDlg:nWidth,oDlg:nHeight+29), ));
        ON INIT (LaBarra(oWnd,oDlg,oBrw,oBrx,oBry),oBrw:SetFocus()) VALID Cierra()

    oFont:END()
    oIcono:END()
RETURN (NIL)


STATIC FUNCTION Cierra()
    IF oRsEmp <> NIL
        IF oRsEmp:State() = adStateOpen
            oRsEmp:Close()
        ENDIF
    ENDIF
...
...
   DBCLOSEALL()

//    FreeResources() // Set Resources To

//    Release All
    SysRefresh()

    /*limpia arreglo y llama al colecor de basura de xharbour*/ //-> Lixeira
    HB_GCALL( .T. )

    CLEAR MEMORY

//    PostQuitMessage( 0 )

//    __QUIT()
RETURN(.T.)
 


Si requieres algo más, por favor solo pidelo

Saludos

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 3:23 pm
by armando.lagunas
ups!

Code: Select all  Expand view


FUNCTION MemoryFlush()
    SetProcess( -1, -1, -1 )
RETURN NIL

DLL32 Function SetProcess( hWnd As LONG, nMinWorkingSpace As LONG, nMaxWorkingSpace As LONG ) As LONG PASCAL From "SetProcessWorkingSetSize" Lib "Kernel32.dll"

 


usando el mismo codigo seria asi la solucion

Code: Select all  Expand view

MEMVAR oApp
FUNCTION SicWin1a(oWindow)

HB_GCALL( .t. )    <--- aqui

...
    DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-10
    DEFINE ICON oIcono RESOURCE "AppLogo"
    DEFINE WINDOW oWnd MDICHILD OF oWindow FROM 0,0 TO 10,10;
        TITLE "Relación de cotizaciones PAILERIA del mes" ICON oIcono

        oWnd:bGotFocus  = { || oBrw:SetFocus() }

        DEFINE DIALOG oDlg RESOURCE "BrwCpa" OF oWnd FONT oFont ICON oIcono;
            BRUSH oApp:oBrush TRANSPARENT
....
....
...
...
        ACTIVATE DIALOG oDlg NOWAIT ON INIT oDlg:MOVE(0,0) VALID ! GetASyncKey(VK_ESCAPE)
    ACTIVATE WINDOW oWnd ON RESIZE ( IF( oWnd<>NIL, oWnd:SETSIZE(oDlg:nWidth,oDlg:nHeight+29), ));
        ON INIT (LaBarra(oWnd,oDlg,oBrw,oBrx,oBry),oBrw:SetFocus()) VALID Cierra()

    oFont:END()
    oIcono:END()

    memoryflush()   <--- aqui

RETURN (NIL)


 

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 4:55 pm
by karinha
Armando tíens un LOOPING WHILE... ENDDO en este codigo?

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 6:08 pm
by Armando
Tocayo:

En este momento voy de salida, en cuanto regrese pruebo tu sugerencia.



Karihna:

Dentro del código mostrado no hay algún WHILE, existe uno antes del código mostrado,
es cuando abro las tablas y paso una de ellas a dos arrays.

Code: Select all  Expand view

        DO WHILE ! oRsSol:EOF()
            AADD(acSol,oRsSol:Fields("SOL_NOM"):Value)
            AADD(anSol,oRsSol:Fields("SOL_SOL"):Value)
            oRsSol:MoveNext()
        ENDDO
 


He hecho pruebas poniendo flags (msgInfo()) para ver donde se atora y es dentro del dialogo "BrwCpa"
en el que tengo 3 xBrowse, llega el momento en que ya no muestra el dialogo y tira el error

Saludos

Re: Mi App se cuelga

PostPosted: Thu Nov 12, 2015 7:09 pm
by karinha
Cambia para:

Code: Select all  Expand view

   WHILE( .NOT. oRsSol:EOF() )

      AADD(acSol,oRsSol:Fields("SOL_NOM"):Value)
      AADD(anSol,oRsSol:Fields("SOL_SOL"):Value)

      oRsSol:MoveNext()

      SYSREFRESH()

   ENDDO
 


Saludos.

Re: Mi App se cuelga

PostPosted: Sun Nov 15, 2015 4:43 pm
by lucasdebeltran
Armando,

¿No te genera un hb_out.log?.