Referencia API de FoxCore
Contenido
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