Referencia API de FoxCore

FoxCoreClass

Clase principal que proporciona la funcionalidad de procesamiento paralelo. Se accede a través de _screen.FoxCore.

Propiedades

Propiedad Tipo Descripción
nMaxTasks Numérico Número máximo de tareas que pueden ejecutarse simultáneamente.
nLogicalProcessors Numérico Número de procesadores lógicos disponibles en el sistema.
cFoxCorePath Carácter Ruta donde está instalado FoxCore.

Métodos

SetTimeout(tnTimeout)

Establece el tiempo máximo de espera para las tareas en segundos.

Parámetros:
  • tnTimeout (Numérico): Tiempo de espera en segundos.
Ejemplo:
_screen.FoxCore.SetTimeout(60)  && 60 segundos

SetVersion(tnVersion)

Establece manualmente la versión de Visual FoxPro a utilizar.

Parámetros:
  • tnVersion (Numérico): Código de versión de VFP (1-7).
Ejemplo:
_screen.FoxCore.SetVersion(1)  && VFP9
Códigos de versión:
  • 1 = VFP9
  • 2 = VFP10.0 x86
  • 3 = VFP10.0 x64
  • 4 = VFP10.1 x86
  • 5 = VFP10.1 x64
  • 6 = VFP10.2 x86
  • 7 = VFP10.2 x64

Run(tcScript)

Ejecuta un script en segundo plano y devuelve un objeto Task.

Parámetros:
  • tcScript (Memo): Código VFP a ejecutar en segundo plano.
Retorna:

Objeto Task

Ejemplo:
TEXT TO lcScript NOSHOW
 * Código a ejecutar
 RETURN "Resultado"
ENDTEXT

loTask = _screen.FoxCore.Run(lcScript)

RunScript(tcScript)

Alias de Run(). Ejecuta un script en segundo plano.

Parámetros:
  • tcScript (Memo): Código VFP a ejecutar.
Retorna:

Objeto Task

NewTask(tcScript)

Crea una nueva tarea sin ejecutarla.

Parámetros:
  • tcScript (Memo): Código VFP para la tarea.
Retorna:

Objeto Task

Ejemplo:
TEXT TO lcScript NOSHOW
 * Código a ejecutar
 RETURN "Resultado"
ENDTEXT

loTask = _screen.FoxCore.NewTask(lcScript)
* Configurar la tarea...
loTask.Run()

RunMultiple(taScripts)

Ejecuta múltiples scripts en paralelo.

Parámetros:
  • taScripts (Array): Array de scripts a ejecutar.
Retorna:

Colección de objetos Task

Ejemplo:
DIMENSION laScripts[3]
TEXT TO laScripts[1] NOSHOW
 * Tarea 1
 RETURN "Resultado 1"
ENDTEXT

TEXT TO laScripts[2] NOSHOW
 * Tarea 2
 RETURN "Resultado 2"
ENDTEXT

TEXT TO laScripts[3] NOSHOW
 * Tarea 3
 RETURN "Resultado 3"
ENDTEXT

loTasks = _screen.FoxCore.RunMultiple(@laScripts)

RunMultipleSequential(taScripts, tlContinueOnError)

Ejecuta múltiples scripts en secuencia, donde cada tarea espera a que termine la anterior.

Parámetros:
  • taScripts (Array): Array de scripts a ejecutar.
  • tlContinueOnError (Lógico): Si es verdadero, continúa la secuencia aunque una tarea falle.
Retorna:

Colección de objetos Task

Ejemplo:
DIMENSION laScripts[2]
TEXT TO laScripts[1] NOSHOW
 * Primera tarea
 RETURN "Resultado 1"
ENDTEXT

TEXT TO laScripts[2] NOSHOW
 * Segunda tarea (se ejecutará después de la primera)
 * Puede acceder al resultado de la tarea anterior con gvPreviousTaskResult
 RETURN "La tarea anterior devolvió: " + gvPreviousTaskResult
ENDTEXT

loTasks = _screen.FoxCore.RunMultipleSequential(@laScripts, .F.)

WaitAll(toTasks, tnTimeout)

Espera a que todas las tareas especificadas se completen.

Parámetros:
  • toTasks (Colección): Colección de tareas a esperar.
  • tnTimeout (Numérico): Tiempo máximo de espera en segundos.
Retorna:

Lógico (verdadero si todas las tareas se completaron, falso si se alcanzó el timeout)

Ejemplo:
loTasks = _screen.FoxCore.RunMultiple(@laScripts)
IF !_screen.FoxCore.WaitAll(loTasks, 60)
 ? "¡Timeout! No todas las tareas pudieron completarse"
ENDIF

WaitAny(toTasks, tnTimeout)

Espera a que cualquiera de las tareas especificadas se complete.

Parámetros:
  • toTasks (Colección): Colección de tareas a esperar.
  • tnTimeout (Numérico): Tiempo máximo de espera en segundos.
Retorna:

Objeto Task (la primera tarea completada) o NULL si se alcanzó el timeout

Ejemplo:
loTasks = _screen.FoxCore.RunMultiple(@laScripts)
loFirstCompletedTask = _screen.FoxCore.WaitAny(loTasks, 30)
IF !ISNULL(loFirstCompletedTask)
 ? "La primera tarea finalizada es:", loFirstCompletedTask.GetTaskId()
ENDIF

GetSystemStats()

Obtiene estadísticas del sistema.

Retorna:

Objeto con estadísticas del sistema

Ejemplo:
loStats = _screen.FoxCore.GetSystemStats()
? "Procesadores lógicos:", loStats.LogicalProcessors
? "Máximo de tareas:", loStats.MaxTasks
? "Tareas activas:", loStats.ActiveTasks
? "Memoria disponible (GB):", loStats.AvailableMemory

GetAvailableMemory()

Obtiene la cantidad de memoria RAM disponible en GB.

Retorna:

Numérico (GB de RAM disponible)

GetProgress()

Obtiene el progreso general de todas las tareas como porcentaje.

Retorna:

Numérico (porcentaje de tareas completadas)

GetTasksSummary()

Obtiene un resumen del estado de todas las tareas.

Retorna:

Objeto con contadores de tareas por estado

Ejemplo:
loSummary = _screen.FoxCore.GetTasksSummary()
? "Total tareas:", loSummary.total
? "Pendientes:", loSummary.pending
? "En ejecución:", loSummary.running
? "Completadas:", loSummary.completed
? "Fallidas:", loSummary.failed
? "Timeout:", loSummary.timedout
? "Canceladas:", loSummary.cancelled

CancelTask(tcTaskId)

Cancela una tarea específica.

Parámetros:
  • tcTaskId (Carácter): ID de la tarea a cancelar.

CancelAll()

Cancela todas las tareas en ejecución.

AddEventListener(tcEventName, toHandler, tcMethod)

Añade un manejador de eventos para un evento específico.

Parámetros:
  • tcEventName (Carácter): Nombre del evento.
  • toHandler (Objeto): Objeto que manejará el evento.
  • tcMethod (Carácter): Nombre del método a llamar.
Ejemplo:
loHandler = CREATEOBJECT("TaskHandler")
_screen.FoxCore.AddEventListener("OnTaskComplete", loHandler, "OnTaskComplete")

RemoveEventListener(tcEventName, toHandler, tcMethod)

Elimina un manejador de eventos.

Parámetros:
  • tcEventName (Carácter): Nombre del evento.
  • toHandler (Objeto): Objeto que maneja el evento.
  • tcMethod (Carácter): Nombre del método.

Task

Representa una tarea individual que se ejecuta en segundo plano.

Propiedades

Propiedad Tipo Descripción
_taskId Carácter Identificador único de la tarea.
_status Carácter Estado actual de la tarea (Pending, Running, Completed, Failed, TimedOut, Cancelled).
_result Variant Resultado de la tarea cuando se completa.
_message Carácter Mensaje de error o información adicional.

Métodos

Run([tcScript])

Ejecuta la tarea en segundo plano.

Parámetros:
  • tcScript (Memo, opcional): Script a ejecutar. Si no se proporciona, usa el script establecido previamente.

SetScript(tcScript)

Establece el script que ejecutará la tarea.

Parámetros:
  • tcScript (Memo): Código VFP a ejecutar.

GetScript()

Obtiene el script asociado a la tarea.

Retorna:

Memo

Cancel()

Cancela la ejecución de la tarea.

TimedOut()

Marca la tarea como expirada por tiempo.

IsCompleted()

Verifica si la tarea ha finalizado (completada, fallida, cancelada o expirada).

Retorna:

Lógico

GetResult()

Obtiene el resultado de la tarea.

Retorna:

Variant

GetMessage()

Obtiene el mensaje de error o información adicional.

Retorna:

Carácter

GetStatus()

Obtiene el estado actual de la tarea.

Retorna:

Carácter (Pending, Running, Completed, Failed, TimedOut, Cancelled)

GetTaskId()

Obtiene el identificador único de la tarea.

Retorna:

Carácter

Wait([tnTimeout])

Espera a que la tarea se complete o alcance el timeout.

Parámetros:
  • tnTimeout (Numérico, opcional): Tiempo máximo de espera en segundos.
Retorna:

Lógico (verdadero si la tarea se completó, falso si se alcanzó el timeout)

SetProperty(tcProp, tvValue)

Establece una propiedad personalizada en la tarea.

Parámetros:
  • tcProp (Carácter): Nombre de la propiedad.
  • tvValue (Variant): Valor de la propiedad.

GetProperty(tcProp)

Obtiene el valor de una propiedad personalizada.

Parámetros:
  • tcProp (Carácter): Nombre de la propiedad.
Retorna:

Variant

SetVariable(tcVarName, tvValue)

Establece una variable que estará disponible en el contexto de la tarea.

Parámetros:
  • tcVarName (Carácter): Nombre de la variable.
  • tvValue (Variant): Valor de la variable.
Ejemplo:
loTask = _screen.FoxCore.NewTask(lcScript)
loTask.SetVariable("lcNombre", "Juan Pérez")
loTask.Run()

GetVariable(tcVarName)

Obtiene el valor de una variable establecida en la tarea.

Parámetros:
  • tcVarName (Carácter): Nombre de la variable.
Retorna:

Variant

GetVariables()

Obtiene todas las variables establecidas en la tarea.

Retorna:

Colección

AddEventListener(tcEventName, toHandler, tcMethod)

Añade un manejador de eventos para un evento específico de la tarea.

Parámetros:
  • tcEventName (Carácter): Nombre del evento.
  • toHandler (Objeto): Objeto que manejará el evento.
  • tcMethod (Carácter): Nombre del método a llamar.
Ejemplo:
loTask = _screen.FoxCore.NewTask(lcScript)
loHandler = CREATEOBJECT("TaskHandler")
loTask.AddEventListener("OnComplete", loHandler, "OnTaskComplete")
loTask.Run()

RemoveEventListener(tcEventName, toHandler, tcMethod)

Elimina un manejador de eventos de la tarea.

Parámetros:
  • tcEventName (Carácter): Nombre del evento.
  • toHandler (Objeto): Objeto que maneja el evento.
  • tcMethod (Carácter): Nombre del método.

Elapsed()

Obtiene el tiempo transcurrido desde el inicio de la tarea.

Retorna:

Numérico (segundos)

TaskExecutionResult

Representa el resultado de la ejecución de múltiples tareas.

Propiedades

Propiedad Tipo Descripción
Tasks Colección Colección de tareas ejecutadas.
Stats Stats Estadísticas de la ejecución.

Stats

Contiene estadísticas sobre la ejecución de múltiples tareas.

Propiedades

Propiedad Tipo Descripción
startTime DateTime Hora de inicio de la ejecución.
endTime DateTime Hora de finalización de la ejecución.
totalTasks Numérico Número total de tareas ejecutadas.
completed Numérico Número de tareas completadas con éxito.
failed Numérico Número de tareas que fallaron.
skipped Numérico Número de tareas omitidas.
cancelled Numérico Número de tareas canceladas.
timedOut Numérico Número de tareas que expiraron por timeout.
totalTime Numérico Tiempo total de ejecución en segundos.
averageTaskTime Numérico Tiempo promedio por tarea en segundos.
result Lógico Resultado global de la ejecución (verdadero si todas las tareas se completaron con éxito).

Eventos

FoxCore proporciona un sistema de eventos para notificar sobre el estado de las tareas.

Eventos a nivel de FoxCore

Evento Parámetros Descripción
OnTaskComplete Task, Result Se dispara cuando una tarea se completa con éxito.
OnTaskFailed Task, Error Se dispara cuando una tarea falla.
OnTaskCancelled Task, Message Se dispara cuando una tarea es cancelada.
OnTaskTimedOut Task, Message Se dispara cuando una tarea expira por timeout.
OnProgress Task, Message, Percentage Se dispara cuando una tarea reporta progreso.
WhenAny Task Se dispara cuando cualquier tarea se completa.
WhenAll TaskExecutionResult Se dispara cuando todas las tareas se completan.

Eventos a nivel de tarea

Evento Parámetros Descripción
OnComplete Task, Result Se dispara cuando la tarea se completa con éxito.
OnFailed Task, Error Se dispara cuando la tarea falla.
OnCancelled Task, Message Se dispara cuando la tarea es cancelada.
OnTimedOut Task, Message Se dispara cuando la tarea expira por timeout.
OnProgress Task, Message, Percentage Se dispara cuando la tarea reporta progreso.

Ejemplo de uso de eventos

* Definir el script a ejecutar
TEXT TO lcScript NOSHOW
   FOR i = 1 TO 5
      WAIT WINDOW "Procesando " + STR(i) + " de 5..." TIMEOUT 1
      Task.Progress("Procesando " + TRANSFORM(i) + " de 5...", i/5*100)
   ENDFOR
   RETURN "Proceso completado exitosamente"
ENDTEXT

* Crear y configurar la tarea
loTask = _screen.FoxCore.NewTask(lcScript)

* Instanciar el manejador y vincular eventos
loHandler = CREATEOBJECT("TaskHandler")
loTask.AddEventListener("OnComplete", loHandler, "OnTaskComplete")
loTask.AddEventListener("OnFailed", loHandler, "OnTaskFailed")
loTask.AddEventListener("OnProgress", loHandler, "OnTaskProgress")

loTask.Run()

* Definir los manejadores de eventos
DEFINE CLASS TaskHandler AS CUSTOM
    PROCEDURE OnTaskComplete(toTask AS Task, tvResult AS Variant)
        ?"Tarea completada: " + TRANSFORM(tvResult)
    ENDPROC
    
    PROCEDURE OnTaskFailed(toTask AS Task, tcError AS String)
        ?"Error: " + tcError
    ENDPROC
    
    PROCEDURE OnTaskProgress(toTask AS Task, tcMessage AS String, tnPercentage AS Integer)
        WAIT WINDOW NOWAIT "Progreso: " + tcMessage + ", " + TRANSFORM(tnPercentage) + "%"
    ENDPROC
ENDDEFINE