HIX Cron/Task Testing - Walkthrough
🎯 Objetivo
Crear y probar ejemplos completos de la nueva funcionalidad de gestión de tareas (cron) de HIX, que permite ejecutar threads de Harbour en segundo plano.
📦 Archivos Creados
He creado 6 archivos de prueba en
1. [test_init.prg](file:///c:/hix/test_init.prg) ⏰
Propósito: Ejemplo básico - Reloj que muestra la hora cada segundo
URL:
Código:
function main()
? 'Init Thread Task: ', HIX_AddTask( 'TIME', hb_threadStart( @zTime() ) )
retu nil
function zTime()
while .t.
_d( time() )
hb_idleSleep(1)
end
retu nilQué hace:
- Inicia una tarea llamada 'TIME'
- Muestra la hora actual cada segundo
- Perfecto para verificar que la funcionalidad básica funciona
---
2. [test_counter.prg](file:///c:/hix/test_counter.prg) 🔢
Propósito: Contador incremental que demuestra persistencia de variables
URL:
Características:
- Contador que incrementa cada 2 segundos
- Muestra cómo mantener estado en un thread
- Útil para verificar que las variables persisten
---
3. [test_logger.prg](file:///c:/hix/test_logger.prg) 📝
Propósito: Sistema de logging con timestamps
URL:
Características:
- Escribe logs cada 5 segundos
- Archivo de salida:
.log\task_logger.txt - Incluye fecha y hora en cada entrada
- Demuestra I/O de archivos desde threads
---
4. [test_multiple.prg](file:///c:/hix/test_multiple.prg) 🔀
Propósito: Múltiples tareas concurrentes
URL:
Tareas que inicia:
- RELOJ: Hora cada segundo
- STATS: Estadísticas del sistema cada 10 segundos
- HEARTBEAT: Señal de vida cada 3 segundos
Código relevante:
HIX_AddTask( 'RELOJ', hb_threadStart( @zClock() ) )
HIX_AddTask( 'STATS', hb_threadStart( @zStats() ) )
HIX_AddTask( 'HEARTBEAT', hb_threadStart( @zHeartBeat() ) )Qué demuestra:
- Ejecución paralela de múltiples threads
- Diferentes intervalos de ejecución
- Monitoreo concurrente
---
5. [test_status.prg](file:///c:/hix/test_status.prg) 📊
Propósito: Monitor de estado de tareas (placeholder)
URL:
Nota: Este archivo es un esqueleto para futuras implementaciones que requieren funciones adicionales como:
HIX_GetTasks() - Para listar tareas activasHIX_GetTaskStatus() - Para obtener estado de una tareaHIX_ListTasks() - Para enumerar todas las tareas
---
6. [test_scheduled.prg](file:///c:/hix/test_scheduled.prg) ⏲️
Propósito: Tareas programadas estilo cron
URL:
Características:
- Tarea horaria automática (cada vez que cambia la hora)
- Tareas específicas en horarios definidos:
- 09:00 - Inicio del día
- 12:00 - Mediodía
- 18:00 - Fin del día
- 00:00 - Mantenimiento nocturno
Uso ideal:
- Backups programados
- Reportes periódicos
- Limpieza automática
- Sincronización de datos
---
🧪 Cómo Probar
Método 1: Navegador (Recomendado)
Simplemente navega en tu navegador a cualquiera de estas URLs mientras HIX.exe está corriendo:
http://localhost/task/test_init.prg http://localhost/task/test_counter.prg http://localhost/task/test_logger.prg http://localhost/task/test_multiple.prg http://localhost/task/test_status.prg http://localhost/task/test_scheduled.prg
Método 2: Curl (Línea de comandos)
curl http://localhost/task/test_init.prg
curl http://localhost/task/test_counter.prg
curl http://localhost/task/test_logger.prgMétodo 3: PowerShell
Invoke-WebRequest -Uri "http://localhost/task/test_init.prg"🔍 Verificación
Después de ejecutar las pruebas, verifica:
Salida en consola/logs de HIX:
- Busca mensajes como
[RELOJ] ,[STATS] ,[HEARTBEAT] - Verifica timestamps actualizándose
- Busca mensajes como
Archivos de log creados:
Comportamiento esperado:
- Las tareas deben seguir ejecutándose después de la inicialización
- Los contadores deben incrementar
- Los logs deben actualizarse periódicamente
💡 Sugerencias de Casos de Uso Reales
Basándome en estos ejemplos, aquí hay casos de uso prácticos:
1. Backup Automático de Bases de Datos
function zBackupDB()
while .t.
if Time() >= '02:00:00' .and. Time() < '02:05:00'
// Ejecutar backup a las 2 AM
BackupDatabase()
endif
hb_idleSleep(300) // Check cada 5 minutos
end
retu nil2. Monitor de Integridad de DBF
function zDbIntegrityCheck()
while .t.
CheckAllDatabases()
ReportIssues()
hb_idleSleep(3600) // Cada hora
end
retu nil3. Limpieza de Archivos Temporales
function zCleanupTemp()
while .t.
CleanOldFiles('.tmp', 7) // Archivos > 7 días
hb_idleSleep(86400) // Una vez al día
end
retu nil4. Sincronización con API Externa
function zApiSync()
while .t.
SyncWithExternalAPI()
LogSyncStatus()
hb_idleSleep(600) // Cada 10 minutos
end
retu nil5. Generación de Reportes Programados
function zDailyReports()
while .t.
if Time() >= '17:00:00' .and. Time() < '17:01:00'
GenerateDailyReport()
EmailReport()
endif
hb_idleSleep(60)
end
retu nil🔧 Funciones Útiles de Harbour
Estas funciones son particularmente útiles en el contexto de tareas:
| Función | Descripción |
|---|---|
| Inicia un thread con la función especificada | |
| Pausa el thread N segundos | |
| Hora actual (HH:MM:SS) | |
| Fecha actual | |
| Convierte fecha a string | |
| Memoria en uso (bytes) | |
| Lee archivo de texto completo | |
| Escribe archivo de texto | |
| Convierte cualquier valor a string |
❓ Preguntas para Investigar
Gestión de tareas:
- ¿Cómo detener una tarea? (
HIX_RemoveTask() ,HIX_StopTask() ?) - ¿Cómo listar tareas activas? (
HIX_ListTasks() ?) - ¿Cómo obtener estado de una tarea?
- ¿Cómo detener una tarea? (
Límites:
Persistencia:
- ¿Las tareas sobreviven un reinicio de HIX?
- ¿Se pueden auto-iniciar tareas al arrancar el servidor?
Comunicación:
- ¿Pueden las tareas compartir datos entre sí?
- ¿Hay mecanismos de sincronización disponibles?
Monitoreo:
- ¿Existe un dashboard para ver tareas activas?
- ¿Se puede ver el output de las tareas en tiempo real?
📋 Checklist de Pruebas
[ ] Ejecutartest_init.prg y verificar logs[ ] Ejecutartest_counter.prg y ver incremento[ ] Ejecutartest_logger.prg y revisar archivo.log\task_logger.txt [ ] Ejecutartest_multiple.prg y verificar 3 tareas concurrentes[ ] Ejecutartest_scheduled.prg y esperar al cambio de hora[ ] Verificar que las tareas siguen corriendo después de minutos[ ] Intentar detener tareas (si existe la funcionalidad)[ ] Intentar listar tareas activas[ ] Monitorear uso de CPU/memoria con múltiples tareas[ ] Probar qué pasa si se reinicia HIX.exe
🎓 Conclusión
He creado una suite completa de ejemplos que cubren:
Los archivos están listos para probar. Simplemente navega a las URLs correspondientes mientras HIX.exe está corriendo en
---
📁 Resumen de Archivos
| Archivo | Líneas | Propósito |
|---|---|---|
| [test_init.prg](file:///c:/hix/test_init.prg) | 15 | Reloj básico |
| [test_counter.prg](file:///c:/hix/test_counter.prg) | 17 | Contador incremental |
| [test_logger.prg](file:///c:/hix/test_logger.prg) | 22 | Sistema de logging |
| [test_multiple.prg](file:///c:/hix/test_multiple.prg) | 47 | Tareas concurrentes |
| [test_status.prg](file:///c:/hix/test_status.prg) | 16 | Monitor de estado |
| [test_scheduled.prg](file:///c:/hix/test_scheduled.prg) | 68 | Tareas programadas |
| TOTAL | 185 | 6 ejemplos completos |
¡Listo para probar!


