Page 1 of 1

Se rompe el programa

PostPosted: Thu Aug 14, 2008 3:09 pm
by jfafive
Hola,

Tengo un XBROWSE que muestra el contenido de un array. Dihco array, contiene un directorio obtenido con la función ADIRECTORY().

Si lo lleno con todos los ficheros del disco duro, es deicr, *.*, me muestra todos los ficheros encontrados desde c:\ en el XBROWSE.

Tengo programado el XBrowse, para que al pulsar sobre la coumna Path, me muestre una ventana del tipo GET MULTILINE, con la ruta de acceso completa de la fila seleccionada.

El browse muestra dos columnas, nombre_fichero y ruta de acceso

He visto que solo cuando se trata de un gran volumen de ficheros, al cerrar la ventana que muestra el path del fichero seleccionado, se rompe el programa.

No da ningun mensaje de error. Simplemente se cierra la aplicación.

Este fallo, como digo, solo ocurre cuando cargo el array con gran volumen de datos. ¿se trata de algun error de memoria? ¿tal vez hay un limite de valores para el array o el xbrowse?

:cry:

PostPosted: Sat Aug 16, 2008 6:50 am
by Antonio Linares
Javier,

Una salida de la aplicación como comentas, normalmente se debe a un error de recursividad en C, que hace que se llegue al límite del stack de C y el sistema operativo cierra la aplicación, por seguridad.

Has comprobado si se llega a generar un fichero error.log ?

Podrías proporcionar un pequeño ejemplo, autocontenido, para reproducirlo aqui ? gracias

PostPosted: Sat Aug 16, 2008 1:23 pm
by jfafive
Pues no llega a generar ningún error.log

Voy a preparar una muestra y te la envio.

Un saludo y gracias Antonio,

PostPosted: Mon Aug 18, 2008 8:09 am
by jfafive
Antonio,

Te mando la prueba por email.
He podido observar que el problema solo ocurre cuando se trata de un XBrowse tipo SetTree con array.

Si lo hago con un XBrowse normal, no hay problema.

Un saludo.

PostPosted: Wed Aug 20, 2008 7:30 pm
by jfafive
Hola de nuevo Antonio

¿has podido ver algo del codigo que te envié?, ya sabes XBrowse con SetTree que se rompe sin más...

PostPosted: Wed Aug 20, 2008 10:15 pm
by Antonio Linares
Javier,

Aqui no se rompe. Lo que ocurre es que tarda mucho en hacer lo que esté haciendo y parece que se cuelga, pero finalmente aparece :-)

PostPosted: Wed Aug 20, 2008 10:16 pm
by Antonio Linares
Ponle un SysRefresh() aqui y verás como le dejas respirar :-)
Code: Select all  Expand view
STATIC function fTree( cPath )

local x
local aFiles    := Iif( SubStr( AllTrim( cPath ), Len( cPath ), 1 ) = "\",;
                        directory( cPath + '*.*' , 'D' ),;
                        directory( cPath + '\*.*', 'D' ) )

local nFilCount := len( aFiles )

SysRefresh()
...

PostPosted: Wed Aug 20, 2008 10:26 pm
by Antonio Linares
De todas formas, lo más efectivo sería no cargar todo de golpe, sino progresivamente, según sea el directorio que se quiera revisar.

No se, depende del diseño que tengas en mente