AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / WLanguage functions / Standard functions / Functions for process management / Threads, semaphores, signals and mutex / WLanguage functions
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Otros
Procedimientos almacenados
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.).
Ejemplo
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.
threadWaitForStartEspera a que el hilo inicie realmente antes de continuar con la ejecución.
Universal Windows 10 AppAndroidWidget Android Java Esta constante no está disponible.
threadGlobalContextFuerza 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.
Universal Windows 10 App Esta constante no está disponible.
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.
Universal Windows 10 App Esta constante no está disponible.
threadLightCopyHFSQLContextActiva 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.
Universal Windows 10 App Esta constante no está disponible.
threadNormalInicia el hilo en modo normal. El contexto HFSQL se copia la primera vez que se utiliza una función HFSQL.
Nueva funcionalidad versión 26
threadSecure
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).
WINDEVWEBDEV - Código ServidorUniversal Windows 10 AppWindows MobileiPhone/iPadApple Watch

Declarar y ejecutar una variable de tipo Thread Ocultar los detalles

<Result> = ThreadExecute(<WLanguage procedure> [, <Parameter 1> [... [, <Parameter N>]]] [, <Options>])
<Result>: Variable de tipo Thread
Variable de tipo Thread que corresponde al hilo ejecutado.
<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).
<Options>: Constante opcional
Modo de inicio del hilo.
threadWaitForStartEspera a que el hilo inicie realmente antes de continuar con la ejecución.
Universal Windows 10 App Esta constante no está disponible.
threadGlobalContextFuerza 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.
Universal Windows 10 App Esta constante no está disponible.
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.
Universal Windows 10 App Esta constante no está disponible.
threadLightCopyHFSQLContextActiva 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.
Universal Windows 10 App Esta constante no está disponible.
threadNormalInicia el hilo en modo normal. El contexto HFSQL se copia la primera vez que se utiliza una función HFSQL.
Nueva funcionalidad versión 26
threadSecure
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).
WINDEVWEBDEV - Código ServidorUniversal Windows 10 AppWindows MobileiPhone/iPadApple Watch

Ejecutar un hilo ya descrito (variable de tipo Thread) Ocultar los detalles

<Result> = ThreadExecute(<Thread>)
<Result>: Variable de tipo Thread
Variable de tipo Thread que corresponde al hilo ejecutado.
<Thread>: Variable de tipo Thread
Nombre de la variable de tipo Thread que corresponde al hilo que se ejecutará.
Atención: Si ya se está ejecutando el hilo o ya ha sido ejecutado, se producirá un error WLanguage.
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.
Universal Windows 10 AppAndroidWidget Android Java Al llamar a las funciones Info, Error, etc., ... no se bloquean los hilos que se están ejecutando.
Observación: Los parámetros se pasan al procedimiento por valor y no por referencia.
WINDEV Para obtener más información sobre la apertura de ventanas en hilos secundarios, consulte Abrir una ventana en una thread secundaria.

Ciclo de vida de un hilo

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.

Gestión de errores

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.
AndroidWidget Android

Detener un hilo

En Android, la función ThreadStop no está disponible.
El hilo solo se puede detener completamente mediante el mismo hilo, al final del procedimiento WLanguage llamado por la función ThreadExecute.
Ejemplo:
ThreadExecute("th", threadNormal, ProcThread)
PROCEDURE ProcThread
bThreadAlive is boolean = True
WHILE bThreadAlive

// ... Process

// Test the end condition of the thread
IF <THREAD END CONDITION> THEN
bThreadAlive = False
END
END
Clasificación Lógica de negocio / UI: Código neutro
Componente: wd260vm.dll
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Video threadExecute
https://youtu.be/IThk-OAzffA

https://windevdesenvolvimento.blogspot.com/2019/01/dicas-1996-windev-threads-02.html
amarildo
24 01 2019

Última modificación: 11/06/2021

Señalar un error o enviar una sugerencia | Ayuda local