|
|
|
|
- Características de un hilo creado en WLanguage
- Hilos y HFSQL
- Características del procedimiento WLanguage
- Ciclo de vida de un hilo
- Gestión de errores
- Procesos no permitidos
- Detener un hilo
Inicia la ejecución de un hilo secundario. La sentencia es no bloqueante: los dos procesos se ejecutan en paralelo. Recordatorio: Un hilo es un proceso que se ejecuta en paralelo con la aplicación actual (hilo principal). Esto le permite iniciar una tarea en segundo plano (hacer una copia de seguridad, etc.).
ThreadExecute("Thread1", threadNormal, ThreadProcedure) ... // Call to a global method of a class ThreadExecute("Thread2", threadNormal, CClass::GlobalMethod)
// Run a thread while passing parameters sDate is string sDate = DateSys() // Run the thread ThreadExecute("THREADNAME", threadNormal, "pExecQry", sDate)
// Details of the "pExecQry" procedure // This procedure expects a date as parameter of a query PROCEDURE pExecQry(sDate) IF HExecuteQuery(Del_Date, hQueryDefault, sDate) = False THEN Error(HErrorInfo()) ELSE HReadFirst(Del_Date) END
Sintaxis
Ejecutar un hilo asignándole un nombre (Sintaxis compatible) Ocultar los detalles
ThreadExecute(<Thread name> , <Options> , <WLanguage procedure> [, <Parameter 1> [... [, <Parameter N>]]])
<Thread name>: Cadena de caracteres (con comillas) Nombre que se asignará al hilo. Este nombre se utilizará en todas las funciones de gestión de hilos. No puede corresponder a una cadena vacía ("") <Options>: Constante Modo de inicio del hilo. | | threadWaitForStart | Espera a que el hilo inicie realmente antes de continuar con la ejecución. | threadGlobalContext | Fuerza el uso del contexto global del proyecto si el hilo se ejecuta desde una ventana. El hilo continuará ejecutándose hasta que se cierre la aplicación. De forma predeterminada, se utiliza el contexto de la ventana, el hilo se detiene al cerrarla. Observación: Si se utiliza la función ThreadExecute en un código de inicialización global (proyecto, clase o conjunto), o desde cualquier procedimiento o método llamado desde un código de inicialización global, esta constante no tiene ningún efecto. | threadFullCopyHFSQLContext (Valor predeterminado) | Activa la copy inmediata del contexto HFSQL actual. Se recomienda si el hilo debe tener en cuenta las posiciones actuales en los archivos y consultas del contexto llamador. | threadLightCopyHFSQLContext | Activa la copy inmediata de una parte del contexto HFSQL actual. Solo se almacenan los directorios que contienen los archivos de datos en modo HFSQL Classic y/o las conexiones en modo HFSQL Client/Server. | threadNormal | Inicia el hilo en modo normal. El contexto HFSQL se copia la primera vez que se utiliza una función HFSQL. | Nueva funcionalidad versión 26threadSecure | Inicia una thread en modo seguro. En este modo, se lanzará una excepción: - si el hilo accede a los controles en tiempo de ejecución,
- si se utiliza ThreadStop.
Cuando se cierra la ventana que activó el hilo, se genera una petición de parada de el hilo (pero el hilo sigue funcionando después de cerrar la ventana). |
<WLanguage procedure>: Nombre de Procedure Nombre del procedimiento WLanguage ejecutado. Este procedimiento se ejecuta en paralelo con la aplicación. <Parameter 1>: Opcional Parámetros que se pasarán al procedimiento. Atención: estos parámetros se pasan por valor (no por referencia). <Parameter N>: Opcional Parámetros que se pasarán al procedimiento. Atención: estos parámetros se pasan por valor (no por referencia). Observaciones Características de un hilo creado en WLanguage Un hilo creado en WLanguage solo puede ser un procedimiento o un método de clase. El hilo no puede corresponder a un proceso WLanguage (código de un control, por ejemplo). Si el hilo es un método de clase, la función ThreadExecute debe ejecutarse desde uno de los procesos de la clase (constructor o método). Hilos y HFSQL Al ejecutar la función ThreadExecute, los contextos HFSQL se duplican automáticamente: el número de contextos HFSQL es igual al número de hilos que se ejecutan. Todo el contexto HFSQL (filtro, condición de búsqueda, etc.) se copia. El contexto HFSQL evoluciona de forma independiente en cada hilo. Esto le permite navegar por un mismo archivo de datos en dos hilos diferentes. Existen dos métodos para copiar contextos HFSQL: - Copia completa del contexto (predeterminada)
- Copia ligera del contexto.
Para obtener más información sobre cómo se copian los contextos HFSQL y sus límites (según la base de datos), consulte Gestión de contextos HFSQL. Ejemplo: - Se crea un filtro en el archivo de datos Customer.
- Se llama a la función ThreadExecute para crear el hilo CTX2.
- En cada hilo (principal y CTX2) se filtra el archivo de datos Customer. Si se desactiva el filtro en el hilo principal, el filtro seguirá activo en el hilo CTX2.
Casos especiales: - Gestión asistida de errores HFSQL: Si se utilizan varios hilos en los archivos de datos, se recomienda personalizar la gestión de errores HFSQL para que no se muestren las ventanas predeterminadas. Utilice la función HOnError para desactivar la gestión automática de errores o para redirigir la gestión de errores a un procedimiento personalizado (sin mostrar ventanas). Para obtener más información, consulte Gestión asistida de errores HFSQL.
- Escritura y asignaciones en un hilo: Si los valores se escriben o se asignan en un Thread, los demás Thread en funcionamiento no comparten esta información. Se pueden producir algunas inconsistencias.
Características del procedimiento WLanguage Atención: Al llamar a las funciones Info, Error, etc., ... se bloquean todos los hilos que se están ejecutando. Observación: Los parámetros se pasan al procedimiento por valor y no por referencia. El hilo se detiene automáticamente al final de la ejecución del procedimiento WLanguage iniciado por la función ThreadExecute. Un hilo también se detiene en los siguientes casos: - si se llama a la función ThreadExecute desde el código de una ventana, el hilo se detendrá al cerrar la ventana.
- si se llama a la función ThreadExecute desde un proceso global (inicialización, llamada explícita en el contexto principal), el hilo se detendrá al final de la aplicación.
- si se llama a la función ThreadExecute en un método de clase, el hilo se detiene cuando se destruye el objeto.
Para forzar la ejecución de un hilo en el contexto principal, utilice la constante threadGlobalContext. Para forzar la interrupción de un hilo, utilice la función ThreadStop. Esta función se puede utilizar para detener un hilo desde el hilo principal. Observación: Se recomienda comprobar que los hilos se han detenido correctamente (con las funciones ThreadState o ThreadWait) antes de cerrar las ventanas o destruir los objetos. Un error fatal ocurre en los siguientes casos: - si el procedimiento no existe.
- si se está ejecutando un hilo con el mismo nombre.
Procesos no permitidos Atención: Los siguientes procesos no se pueden ejecutar en los hilos: | Atención: Los elementos de la interfaz de usuario (ventanas, controles, etc.) no pueden ser manipulados en un Thread.secundario Cuando un Thread secundario debe interactuar con el usuario o actualizar la UI, debe utilizar un Process iniciado desde el Thread principal. Este proceso puede corresponder a:- un procedimiento global del proyecto o un procedimiento local (de una ventana, etc.) llamado con la función ExecuteMainThread,
- el evento "Solicitud para actualizar la visualización" de una ventana, ejecutado con la función RequestRefreshUI.
|
Clasificación Lógica de negocio / UI: Código neutro
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|