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
MaxWorkersde 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 conGetProgress()yGetProgressMessage()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
TimedOuty 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 conGetValue()ySetValue() - 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
| Componente | Requisito |
|---|---|
| Visual FoxPro | VFP 9.0 SP2, registrado como VisualFoxpro.Application.9. Se puede cambiar qué proceso hace de worker con WorkerProgId |
| Windows | Windows 10 u 11 |
| .NET Framework | 4.8 |
| Registro COM | Con 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.