IR
irwinrodriguez.dev
Volver a documentación

FoxCore

FoxCore.Runtime saca el trabajo largo del hilo principal de Visual FoxPro. Cada tarea arranca su propio proceso VFP, se le inyecta el guion, se recoge el resultado y se cierra: VFP sigue siendo monohilo, lo que hay son varios VFP. La aplicación no se queda muerta mientras tanto, y N tareas corren a la vez.

Conviene decirlo pronto porque ahorra disgustos: FoxCore no hace el código más rápido. Un proceso que tarda 40 segundos sigue tardando 40 segundos. Lo que cambia es que no bloquea, que puedes enseñar progreso y cancelar, y que varios caben a la vez. Y arrancar un worker cuesta entre una décima y tres segundos, así que una tarea de 200 ms no es candidata: el arranque cuesta más que el trabajo.

En esta sección

  • Instalación: Requisitos, el instalador y el registro en las dos vistas.
  • Primeros pasos: Tu primera tarea en otro proceso, en menos de cinco minutos.
  • Patrones avanzados: El lote, el lote grande, el progreso con cancelación, los handlers y la pizarra.
  • Referencia API: Los seis tipos COM, miembro a miembro, y lo que no existe.
  • Ejemplos: Tres programas completos, tal como se ejecutan.
  • Licencias: Una licencia por empresa, qué cambió en 3.4.0 y cómo se activa.

Lo que hace

  • Ejecuta el mismo código VFP, sin reescribirlo, en otro proceso: con resultado de vuelta, progreso, cancelación, plazo y cierre determinista
  • MaxWorkers de 1 a 64 procesos simultáneos; por defecto, min(núcleos, 8)
  • Progreso y mensajes desde dentro de la tarea con runtime.Progress(), que se leen con GetProgress() y GetProgressMessage() sin necesidad de bombear
  • Cancelación cooperativa: la tarea pregunta runtime.IsCancelled() en cada vuelta de su bucle
  • Plazo por tarea, y al vencer la tarea acaba TimedOut y el worker muere
  • Aislamiento total: el worker no ve tus variables, ni tus áreas de trabajo, ni tus SET, ni tus cursores. Nace limpio, y lo que necesite lo abre él
  • El worker puede llamar de vuelta al host con Call(), y las dos partes comparten una pizarra con GetValue() y SetValue()
  • Contrato COM congelado: seis tipos, y los miembros crecen sólo por el final
Lo que no hay, y no conviene buscarlo No existen Wait ni WaitAll (el patrón es el bucle con Pump()), ni eventos OnComplete / OnFailed, ni el objeto Task ni la clase FoxCoreClass: eso era el motor clásico, otra línea de producto. Los veintiséis example*.prg que andan por ahí son suyos y no valen aquí.

Requisitos

ComponenteRequisito
Visual FoxProVFP 9.0 SP2, registrado como VisualFoxpro.Application.9. Se puede cambiar qué proceso hace de worker con WorkerProgId
WindowsWindows 10 u 11
.NET Framework4.8
Registro COMCon el RegAsm de 32 bits (obligatorio: es el que mira vfp9.exe) y, desde 3.4.0, también el de 64. Lo hace el instalador
Una licencia por empresa, y sin conexión FoxCore se vende como una licencia por empresa a 299 €, sin contar puestos. No es un fichero: es un JWT que le pasas por código a Activate(), y se valida en local, sin llamar a ningún servidor. Desde 3.4.0 se exige también fuera del IDE, en el .exe o la .dll que tú distribuyes. Sin licencia válida el ciclo de vida sigue funcionando (Attach, Ping, Shutdown), pero las tareas nacen Failed. Versión publicada: 3.4.2.