Noticias

¿Cómo ejecutar un procedimiento en "paralelo" en VFP?

A veces es necesario llamar a un objeto que procesará determinada información y tiene un tiempo de proceso considerable. Por ejemplo, dado un conjunto de facturas que se muestran en un work panel, se debe elegir un conjunto de las mismas para imprimirlas.

A veces es necesario llamar a un objeto que procesará determinada información y tiene un tiempo de proceso considerable.
Por ejemplo, dado un conjunto de facturas que se muestran en un work panel, se debe elegir un conjunto de las mismas para imprimirlas. Esto significa que se llamará a un procedimiento que recorre las "marcadas" y las imprime.

El código sería algo similar a:

Event enter
   For each line
     
If &Marcada=’S’
        
Call(pmarca) // este objeto marca la factura como pendiente de impresión
     
Endif
     
&Marcada=’N’
  
endfor
  
call(pimprime)
endevent

En el ejemplo, el usuario de la aplicación deberá esperar que el "pimprime" finalice la impresión antes de poder continuar utilizando la aplicación.

Lo que se puede hacer para evitar la espera del usuario es:

  • Definir el procedimiento como Main (EXE)
  • Sustituir el "call(pimprime)" por "DBASE ! aimprime"

Al hacerlo de esta manera se abre otra ventana VFP y corre el procedimiento independientemente dejando al llamador libre.

Otra manera de hacerlo es declararlo como main y sustituir el call por lo siguiente:

DBASE RUN/N aimprime.exe

El RUN lo que hace es ejecutar el procedimiento dejando "libre" al llamador, y el /N hace que no se abra otra ventana.

NOTA: Recuerde que si un objeto es main la primer letra cambia, en el ejemplo el procedimiento es "P" pero al ser main pasa a "A". Debe incluirse el nombre del EXE.