EXIT PROCEDURE
 Declara un procedimiento de clausura
------------------------------------------------------------------------------
 Sintaxis

     EXIT PROCEDURE <idProcedimiento>
        [FIELD <lista idCampo> [IN <idAlias>]]
        [LOCAL <identificador> [[:= <inicializador>]]]
        [MEMVAR <lista identificador>]
        .
        . <sentencias ejecutables>
        .
        [RETURN]

 Argumentos

     EXIT PROCEDURE declara un procedimiento que se ejecuta al terminar
     el programa.

     <idProcedimiento> es el nombre del procedimiento de clausura que se
     va a declarar. Los nombres de procedimientos de clausura pueden tener
     cualquier longitud, pero sólo son significativos los primeros 10
     caracteres. Los nombres no deben comenzar con un signo de subrayado,
     pero pueden contener cualquier combinación de caracteres, números o
     signos de subrayado.

     FIELD declara una lista de identificadores para utilizar como
     nombres de campo siempre que se encuentren. Si se especifica la
     cláusula IN, la referencia al nombre declarado incluye una referencia
     implícita al alias especificado.

     LOCAL declara y, opcionalmente, inicializa una lista de variables o
     matrices, cuya visibilidad y vida es la del procedimiento actual.

     MEMVAR declara una lista de identificadores para utilizar como
     variables o matrices de memoria privadas o públicas, siempre que se
     encuentren.

     RETURN pasa el control al siguiente procedimiento de clausura o al
     sistema operativo, si no hay pendiente ningún otro procedimiento de
     clausura.

 Descripción

     La sentencia EXIT PROCEDURE declara un procedimiento que se ejecutará
     cuando finalice el programa. Los procedimientos de clausura se llaman
     después de que se haya completado la última sentencia ejecutable en una
     aplicación de CA-Clipper. Las sentencias EXIT PROCEDURE pueden
     utilizarse para ejecutar tareas de mantenimiento habituales, como por
     ejemplo, guardar los parámetros de configuración en un fichero, cerrar
     un fichero de registro o concluir una sesión de comunicaciones.

     La visibilidad de los procedimientos de clausura está limitada al
     sistema; por lo tanto, no es posible llamar a un procedimiento de
     clausura desde un procedimiento o función definido por el usuario. Los
     procedimientos de clausura no reciben parámetros.

     Una vez que se ha completado la última sentencia ejecutable, el control
     pasa de un procedimiento de clausura al siguiente hasta que se ha
     llamado a todos los procedimientos de la lista de clausura. El control
     pasa seguidamente al sistema operativo.

     La sentencia ANNOUNCE declara un identificador de módulo para un módulo
     fuente (.prg). Una vez declarado, se hace referencia a las sentencias
     EXIT PROCEDURE con este identificador de módulo. Una aplicación puede
     utilizar cualquier número de procedimientos de clausura, solicitando de
     forma explícita mediante REQUEST sus identificadores de módulo.

     Los procedimientos de clausura solicitados para una aplicación se
     conocen, de forma colectiva, como la lista de clausura. No existe un
     orden de ejecución obligatorio de los procedimientos de la lista de
     clausura; sin embargo, si un procedimiento de clausura se declara en el
     mismo módulo fuente (.prg) que la rutina principal o raíz, éste será el
     primer procedimiento de clausura llamado.

     La terminación de una aplicación de CA-Clipper puede atribuirse a
     alguna de las siguientes causas:

      RETURN desde la rutina principal o raíz

      el mandato QUIT

      la ejecución de un BREAK sin incluir BEGIN SEQUENCE...END

      error irrecuperable

     No se puede garantizar la ejecución de un procedimiento de clausura
     cuando el sistema detecta un error irrecuperable. Si se ha producido un
     error durante un procedimiento de clausura, el sistema vuelve al DOS.
     Los procedimientos de clausura pendientes no se llaman.

 Ejemplos

      En este ejemplo se ilustra la construcción de un mecanismo de
        temporización simple, utilizando INIT y EXIT PROCEDURE:

        // imprime la cantidad de tiempo necesario para,
        // leer, ordenar y mostrar una lista de nombres
        // de ficheros.

        ANNOUNCE MiSistema

        STATIC nInicio

        PROCEDURE Main()
           AEVAL( ASORT( DIRECTORY( "*.*" ) ),;
               { | aInfoFichero | QOUT( aInfoFichero[ 1 ] ) } )
           RETURN

        INIT PROCEDURE MiInicio()
           nInicio := SECONDS()
           RETURN

        EXIT PROCEDURE MiClausura()
           ?
           ? "Tiempo transcurrido: "
           ?? SECONDS() - nInicio
           RETURN

 To download this example - click here.

See Also: ANNOUNCE REQUEST INIT PROCEDURE