IR
irwinrodriguez.dev
FC Licencia perpetua · Pago único

Un proceso pesado deja la interfaz de tu aplicación VFP congelada hasta que termina.

Tareas en segundo plano. UI siempre reactiva.

Ejecuta procesos pesados (importaciones, informes, llamadas a APIs) sin bloquear la interfaz de tu aplicación VFP. Cada tarea corre en su propio proceso VFP, con el mismo código de siempre: hasta 64 a la vez, y por defecto tantas como núcleos, con un tope de 8.

Para quién
  • Importaciones
  • Informes
  • Llamadas a APIs
  • Lotes y sincronizaciones

Sin tarjeta. Al verificar tu correo tienes 30 días de licencia completa (no es una versión recortada) de FoxServer, FoxCore, FoxBridge, FoxAgent, FoxCli y FoxCli MCP, con su instalador, en tu portal. Una por persona y producto; a los 30 días caduca.

Características

Ejecución asincrona

Lanza tareas VFP en segundo plano. La UI permanece completamente reactiva mientras el trabajo ocurre en paralelo.

Progreso y cancelación

La tarea informa con runtime.Progress(0-100, mensaje) y el formulario lo lee con GetProgress(). Y pregunta runtime.IsCancelled() en cada vuelta, así que el botón «Cancelar» funciona de verdad.

El worker llama de vuelta

Desde el guion, runtime.Call() ejecuta un handler tuyo en el proceso principal, y GetValue()/SetValue() son una pizarra compartida entre los dos.

De 1 a 64 procesos

MaxWorkers según tu hardware; la regla práctica son los núcleos físicos. Para lotes, sincronizaciones e informes.

Aislamiento total

El worker no ve tus variables, ni tus áreas de trabajo, ni tus SET, ni tus cursores. Nace limpio y abre lo que necesita: es la mejor propiedad del producto, y también su mayor restricción.

Una licencia por empresa

No se cuentan puestos ni copias: el mismo JWT vale para todo tu equipo y viaja dentro del .exe que entregas a tus clientes.

Como funciona

  1. 1
    Arranca el motor una vez

    loRt = CREATEOBJECT('FoxCore.Runtime'), loRt.Activate(lcJwt) y loRt.Attach(_VFP). La licencia es un JWT que pasas por código: no hay ningún fichero que copiar.

  2. 2
    Lanza el trabajo y sigue

    loRt.RunScript(lcGuion, 'MiTarea') devuelve el id de la tarea al instante: el guion VFP corre en otro proceso y tu formulario no se queda pegado.

  3. 3
    Recoge el resultado

    Con ese id: GetProgress() para la barra, IsCompleted() para saber si acabó y GetResult() para el valor. Al cerrar, loRt.Shutdown().

Precio

Una licencia por empresa. Pago único, sin contar puestos. La versión que compras funciona para siempre.

Licencia
299 €
Renovación opcional: 75 € al año
Una por empresa, sin límite de desarrolladores. Un año de actualizaciones incluido, y la distribuyes dentro de tu .exe sin contar copias. Se activa por código con Activate().
Comprar

Preguntas frecuentes

¿Cuántas tareas puedo ejecutar en paralelo?
MaxWorkers va de 1 a 64, y por defecto es min(núcleos, 8). La regla práctica son los núcleos físicos de la máquina: por encima de ahí los procesos se estorban. Y ojo con el impuesto fijo: arrancar un worker cuesta entre una décima y tres segundos, así que una tarea de 200 ms no compensa.
¿Las tareas comparten memoria con la interfaz?
No. Cada tarea corre en su propio proceso VFP y no comparte variables públicas, SET ni cursores con el principal. Lo que sí hay es una pizarra explícita, GetValue() y SetValue(), y la llamada de vuelta runtime.Call().
¿Puedo acceder a DBFs desde las tareas?
Sí, pero con cuidado: cada worker abre sus propias tablas, y no hereda ninguna de las tuyas. Ábrelas en modo compartido (SET EXCLUSIVE OFF) y no escribas a la vez sobre lo mismo sin coordinarlo.
La licencia cubre todas mis instalaciones de desarrollo?
Sí. Es una licencia por empresa: no se cuentan puestos ni copias, y el mismo JWT vale en todas las máquinas donde trabajes y en el .exe que entregues a tus clientes. Si compraste antes una de 1, 4 u 8 asientos, sigue valiendo tal cual.
¿Qué pasa si una tarea lanza un error?
La tarea pasa al estado Failed y GetError(id) trae el mensaje. Si la tarea se pasa de su plazo, acaba en TimedOut y el worker muere. No hay eventos OnComplete ni OnFailed: se pregunta con IsCompleted(), o con PollCompleted() si el lote es grande.
¿Qué pasa cuando se acaba el mantenimiento?
La licencia sigue valiendo y lo que compraste sigue funcionando. Lo que se acota es hasta qué versión llegas: tienes derecho a todas las publicadas hasta el día en que vence, y el portal aplica esa regla al descargar, sirviéndote la última a la que llegas en vez de la más nueva. Renovar es opcional y se pide escribiendo a soporte@irwinrodriguez.dev.

Sin más UIs congeladas en tus apps VFP

Instala FoxCore y ten tu primera tarea en segundo plano funcionando en minutos.

Comprar ahora