Page 1 of 1

Problemas con Syswait.

Posted: Sat Nov 23, 2019 11:37 pm
by Andrés González
Hola compañeros de foro,
Hace años que transporté mis antiguos programas hechos con clipper a fivewin, y en aquellos browses que clipper paraba su flujo con inkey() yo lo sustituí por Syswait. Han funcionado siempre bien y nunca se han parado por algun error de programa. Ahora me he dado cuenta que cuando dejas el brwose mucho tiempo abierto hace un consumo exagerado de memoria y cuando abandonas el programa, sale sin problemas pero el proceso se queda en el administrador de tareas activo hasta que o bien sales de tu sesion o ahora que lo sé matas el proceso, Nadie se había quejado, pero ahora que lo sé tengo que buscar una solución. Si el programa lo dejas el tiempo que sea solo con el menú no da problemas esto solo ocurre cuando muestro el browse en pantalla, con lo que me imagino que es por el syswait.

Hay alguna manera de evitar que el syswait haga este consumo de memoria, me refiero a ver si se puede hacer una limpieza de memoria cada poco o similar (Garbage collector), no sé si el error se produce por la aglomeración de basura en la memoria o por otro motivo, pero si estoy poco tiempo no pasa nada, o sea si trabajo con el browse menos de media hora, el programa sale y no se queda en el administrador de tareas, pero si estoy mas tiempo al salir del programa lo hace sin que el usuario note nada pero se quedael proceso abierto en el administrador de tareas. Si este programa lo utilizas varias veces, te genera varios procesos que te consumen la memoria y todo se vuelve mas lento.

Alguien encuentra alguna solucion o le ha ocurrido algo similar?

Code: Select all

    ACTIVATE WINDOW oWndEdit MAXIMIZED ;
                          ON INIT ( setScope(x_orden), DbGoto(&x_rec) ) ;
                            ON RESIZE oSpl:AdjRight();
                      VALID ( lExit:= .T., .T. )

   
   DO WHILE !lExit 
      SysRefresh()
      SysWait(.1)
   ENDDO
Un saludo.

Re: Problemas con Syswait.

Posted: Mon Nov 25, 2019 5:57 pm
by karinha
En el button de salida del programa:

Code: Select all

FUNCTION CLOSE_WINDOW()


   // DELETEFILE( "WINORCAM.LOG" )

   /*
   DeleteObject( oFont )
   DeleteObject( oBrush )
   */

   DbCommitAll()
   DbUnLockAll()
   DbCloseAll()

   FreeResources()
   Release All

   SysRefresh()

   HB_GCALL( .T. )

   CLEAR MEMORY

   /*
   IF FILE( "checkres.txt" )
      FErase( "checkres.txt" )
   ENDIF

   CheckRes()
   */

   PostQuitMessage( 0 )

   QUIT

RETURN NIL