Proteger variables de memoria.

¿Es posible crear una variable de memoria o un objeto publico que no se borre al ejecutar CLEAR ALL?

1 respuesta

Respuesta
1
Estuve investigando en los archivos de ayuda del sistema y encontré lo siguiente:
CREATEOBJECT( ) (Función)
Crea un objeto a partir de una definición de clase o una aplicación preparada para Automatización.
CREATEOBJECT(ClassName [, eParameter1, eParameter2, ...])
Valores devueltos
Object
Parámetros
ClassName
Especifica la clase o el objeto OLE a partir del cual se crea el nuevo objeto. Visual FoxPro busca la clase o el objeto OLE en el orden siguiente:
a. Clases de base de Visual FoxPro.
b. Clases del programa actual.
c. Clases de las bibliotecas de clases .vcx abiertas con SET CLASSLIB.
d. Clases de los archivos de procedimientos abiertos con SET PROCEDURE.
e. Clases de la cadena de ejecución del programa de Visual FoxPro.
f. El registro de OLE si SET OLEOBJECT está establecido en ON.
Los objetos OLE se crean con la sintaxis siguiente para ClassName:
ApplicationName.Class
Por ejemplo, para crear una hoja de cálculo de Microsoft Excel (que admite la Automatización), puede utilizar la sintaxis siguiente:
x = CREATEOBJECT('Excel.Sheet')
Cuando se ejecuta este código, se inicia Microsoft Excel (si no está en funcionamiento) y se crea una hoja de cálculo nueva.
Una biblioteca de clases puede tener un alias. Para especificar un objeto en una biblioteca de clases con un alias, incluya el alias de la biblioteca de clases seguido de un punto y el nombre del objeto.
Observe que ClassName no puede ser la clase de base del control OLE Container de Visual FoxPro.
eParameter1, eParameter2, ...
Estos parámetros opcionales sirven para transferir valores al procedimiento de evento Init de la clase. El evento Init se ejecuta después que CREATEOBJECT( ) y permite inicializar el objeto.
Observaciones
Utilice CREATEOBJECT( ) para crear un objeto a partir de una definición de clase o una aplicación que admita Automatización y asigne al objeto una referencia a una variable de sistema o un elemento de matriz.
Antes de crear un objeto a partir de una clase definida por el usuario, ésta deberá crearse previamente con DEFINE CLASS o deberá estar disponible en una biblioteca de clases visuales .vcx abierta con SET CLASSLIB.
Utilice = o STORE para asignar al objeto una referencia a una variable de sistema o un elemento de matriz. Si se libera un objeto asignado a una variable de sistema o un elemento de matriz, la variable de sistema o el elemento de matriz contendrá el valor nulo. Utilice RELEASE para quitar de la memoria la variable de sistema o el elemento de matriz.
Ejemplo
El ejemplo siguiente usa DEFINE CLASS y CREATEOBJECT( ) para crear dos clases personalizadas llamadas FormChild y FormGrandChild a partir de la clase de base Form de Visual FoxPro. ACLASS( ) se utiliza para crear una matriz llamada gaNewArray que contiene los nombres de clase, que se muestran después.
Clear
* Verify current class library setting
cCurClassLib=SET("CLASSLIB")
IF LEN(ALLTRIM(cCurClassLib))=0
cCurClassLib="None"
ENDIF
WAIT WINDOW "Current class library is: " + cCurClassLib + CHR(13);
+ "Press any key to continue..."
frmMyForm = CREATEOBJECT("FormGrandChild")
* Create an array
FOR nCount = 1 TO ACLASS(gaNewarray, frmMyForm)
? gaNewarray(nCount) && Display the names of the classes
ENDFOR
RELEASE frmMyForm
* Create FormChild from FORM baseclass
DEFINE CLASS FormChild AS FORM
ENDDEFINE
* Create FormGrandChild from user-defined FormChild class
DEFINE CLASS FormGrandChild AS FormChild
ENDDEFINE
CLEAR (Comandos)
Libera de la memoria el elemento o los elementos especificados.
CLEAR [ALL | CLASS ClassName | CLASSLIB ClassLibraryName | DEBUG | DLLS [cAliasNameList]| EVENTS | FIELDS | GETS | MACROS | MEMORY | MENUS | POPUPS | PROGRAM | PROMPT | READ [ALL] | RESOURCES [FileName] | TYPEAHEAD | WINDOWS]
Parámetros
ALL
Libera de la memoria todas las variables y matrices, así como las definiciones de todas las barras de menús, menús y ventanas definidas por el usuario. CLOSE ALL también cierra las tablas, lo que incluye todos los archivos de índices, memo y de formato asociados, y selecciona el área de trabajo 1. CLEAR ALL también libera de la memoria todas las funciones de bibliotecas compartidas externas registradas con DECLARE - DLL.
CLEAR ALL no libera las variables del sistema y no borra el búfer de programas compilados. Utilice CLEAR PROGRAM para borrar el búfer de programas compilados.
Si ejecuta CLEAR ALL sobre un evento o un método para un control o un objeto activo, se genera un mensaje de error de Visual FoxPro. Una variable de tipo Object no se puede liberar de la memoria cuando su control u objeto asociado está activo.
CLASS ClassName
Borra de la memoria una definición de clase. Cuando se crea una instancia de una clase, Visual FoxPro conserva en memoria la definición de clase después de liberar la instancia. Utilice CLEAR CLASS para borrar de la memoria una definición de clase después de liberar su instancia.
CLASSLIB ClassLibraryName
Borra de la memoria todas las definiciones de clase contenidas en una biblioteca de clases visuales. Si existen instancias de clases en la biblioteca de clases, las definiciones de clase no se borrarán de la memoria y se generará un mensaje de error. Sin embargo, todas las definiciones de clase que no tengan instancias se borrarán de la memoria.
Debug
Borra todos los puntos de interrupción en el Depurador y restaura las ventanas del Depurador (Pila de llamadas, Seguimiento, Inspección, etc.) a sus posiciones predeterminadas.
Si se ejecuta Clear Debug mientras está cerrado el Depurador, se abrirá el Depurador con sus ventanas en las posiciones predeterminadas.
Funciona tanto en modo de marco de depurador como en modo de marco de fox.
DLLS cAliasNameList
Borra de la memoria las bibliotecas compartidas externas registradas con DECLARE - DLL. CAliasNameList es una lista, separada por comas, de los alias de función que se van a quitar de la memoria, como en el siguiente ejemplo:
CLEAR DLLS "RegCloseKey","RegOpenKey"
Si no utilizó ningún alias en la declaración, cAliasNameList es igual al nombre de la función. Si se especifica cAliasNameList, todas las DLL se quitan de la memoria. Puede utilizar la función ADLLS( ) para determinar qué DLL están cargadas.
Vea DECLARE - DLL (Comando) para obtener más información acerca del registro de bibliotecas compartidas externas.
Events
Detiene el procesamiento de eventos iniciado con READ EVENTS. Cuando se ejecuta CLEAR EVENTS, la ejecución del programa continúa en la línea de programa inmediatamente posterior a READ EVENTS.
Fields
Libera una lista creada con SET FIELDS y ejecuta SET FIELDS OFF. CLEAR FIELDS se diferencia de SET FIELDS TO en que libera todas las listas de campos en todas las áreas de trabajo, no sólo la lista de campos del área de trabajo actual. Además, SET FIELDS TO no ejecuta implícitamente SET FIELDS OFF.
GETS
Libera todos los controles @ ... GET pendientes. La ejecución de CLEAR también libera todos los controles @ ... GET pendientes.
Nota GETS se incluye por compatibilidad con versiones anteriores.
Macros
Libera de la memoria todas las macros de teclado, incluidas todas las asignaciones de teclas de SET FUNCTION. Las macros se pueden guardar en un archivo de macro o en un campo memo con SABE MACROS y restaurarse más tarde con RESTORE MACROS. También puede restaurar las macros predeterminadas con RESTORE MACROS.
Memory
Libera de la memoria todas las variables y matrices públicas y privadas. Las variables del sistema no se liberan.
Menús
Libera de la memoria todas las definiciones de barras de menús.
Popups
Libera de la memoria todas las definiciones de menús creadas con DEFINE POPUP.
PROGRAM
Borra el búfer del programa compilado. Visual FoxPro mantiene un búfer de los programas ejecutados más recientemente. En raras ocasiones puede ocurrir que Visual FoxPro no reconozca los cambios efectuados en los archivos de programa en disco. CLEAR PROGRAM obliga a Visual FoxPro a leer los programas en el disco, en lugar de en el búfer de programas. La razón más común por la que Visual FoxPro puede no reconocer los cambios en los archivos de programa es el uso de un editor TSR (programa residente) o externo para modificar un archivo de programa. Salvo esta excepción, no debería ser necesario el uso de CLEAR PROGRAM.
PROMPT
Libera los elementos de menú creados con @ ... PROMPT.
read [all]
Se incluye por compatibilidad con versiones anteriores. Utilice CLEAR EVENTS en su lugar.
RESOURCES [FileName]
Especifica el nombre de un mapa de bits, una imagen, una fuente, un cursor o un archivo de icono en caché que se va a borrar de la memoria. Si no se especifica ningún nombre de archivo, se borrarán de la memora todos los mapas de bits, imágenes, fuentes, cursores y archivos de icono.
Cuando Visual FoxPro muestra un mapa de bits, un cursor, una imagen, un icono o un recurso de fuentes, se almacenará el recurso en la caché para mejorar el rendimiento. Si se ha utilizado un recurso con el mismo nombre (por ejemplo, un mapa de bits distinto con el mismo nombre que otro que ya está en la caché), Visual FoxPro no volverá a cargar el recurso.
El hecho de borrar un archivo de recursos es, por tanto, especialmente útil para quitar una imagen gráfica de la memoria y para forzar a Visual FoxPro a volver a cargar una imagen del mismo nombre del disco. Por ejemplo, es posible que un informe muestre imágenes gráficas procedentes de una base de datos y que todas se llamen TEMP. Sin embargo, dado que todas se llaman igual, Visual FoxPro no volverá a cargar cada nuevo gráfico a no ser que se haya borrado de la memoria el ya existente mediante el comando CLEAR RESOURCES.
Typeahead
Borra el búfer de escritura de teclado. CLEAR TYPEAHEAD es útil cuando se desea impedir la entrada en un campo o la respuesta a una petición antes de que se muestren el campo o la petición.
WINDOWS
Libera de la memoria todas las definiciones de ventanas definidas por el usuario y borra las ventanas de la ventana principal de Visual FoxPro o la ventana activa definida por el usuario. Las definiciones de ventanas se pueden guardar con SABE WINDOW en un archivo o campo memo para su uso posterior.
La ejecución de CLEAR WINDOWS libera cualquier referencia de variable de sistema a formularios. Por ejemplo, los comandos siguientes crean una referencia de variable de sistema para un formulario y, después, muestran información acerca de dicha variable:
goMyForm = CREATEOBJECT('FORM')
DISPLAY MEMORY LIKE goMyForm && Displays GOMYFORM O FORM
La ejecución de CLEAR WINDOWS libera la referencia de variable de sistema y la variable contiene ahora el valor nulo:
Clear windows
DISPLAY MEMORY LIKE goMyForm && Displays GOMYFORM O .NULL.
Observaciones
CLEAR borra la ventana principal de Visual FoxPro o la ventana activa definida por el usuario y libera de la memoria todos los controles @ ... GET pendientes. Se puede incluir CLEAR en archivos de formato.
Vea también
@ ... CLEAR | CLOSE | DECLARE - DLL | READ | READ EVENTS | RELEASE | RELEASE CLASSLIB | RELEASE WINDOWS
Como has leído CLEAR ALL borra todo excepto las variables del sistema; por tanto la única opción que se presenta es utilizar RELEASE, ya que puedes especificar la o las variables que deseas eliminar de la memoria. En lo personal utilizo Clear All como un comando a ejecutar en el botón Salir de mis aplicaciones.
Hasta pronto y, no olvides valorar la respuesta.
Muchas gracias por el esfuerzo que hiciste con mi inquietud. Espero algún día poder colaborarte si es posible. Francisco ([email protected])
Clear all elimina todas las variables y array existentes; pero no tiene la opción de conservar alguna variable en especial. Crea un archivo .prg y prueba con el siguiente código:
Clear
* Definición de variables
public a, b, c, d, e
* Asignación de valores
store 1 to a, c
store 0 to b, d
store "Esta variable se conservará" to e
* Presentación de resultados
? a, b, c, d, e
* Eliminación de variables especificadas en la lista
release a, b, c, d
* Presentación de resultados: Marcará error; pero presiona el botón Ignorar
? a
? b
? c
? d
* Esta variable si presentará resultados
? e
Espero que te sea de utilidad. No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o